① cpld输出固定值电平就对( dout <=8'b01010101),输出变量值电平就不对( dout <=tsq[7:0]; )
万用表测的么,看样子可能你输出的是方波,你用示波器看看,1.7不正好是3.3的一般左右么,呵呵
② 基于FPGA的方波占空比调节
建议你先将BZQ,TSQ设成常数,再试试。
看了你的代码,觉得除了设计之外,有几个问题。
1.verilog不是C语言。实现乘除法时,直接写运算符虽然可以综合,但逻辑很深,时序会很差。例如:if(cnt<(BZQ/TSQ)&&cnt>=(BZQ/TSQ)*ty/100),这样的逻辑深度是可怕的,估计只能跑到几MHz。你所遇到的问题不排除是时序问题(timing issue)。
2.第一个always块很不规范,而且不是同步电路。更好的实现方法是:
always @(posedge BCLK)
begin
if(~START)
begin
start<=1;
end
end
3.系统没有复位信号。所有的数字系统应当有系统复位。always块应当用这样的模板:
always @(posedge mclk or posedge mrst)
begin
if(mrst)
begin
reg1 <= 0;
end
else
begin
if (...)
begin
reg1<=input1;
end
else
begin
reg1 <= input2;
end
end
end
4.信号或寄存器名称不能靠大小写区分。虽然verilog大小写是敏感的,但没有公司会允许大小写混用,一般都规定统一大写或小写,更何况是一样的名称,仅靠大小写区分。如START,可以改成,start_in。