设计思路:
分别描述占空比为40%、50%、60%、70%和80%的电路模块,然后将5路输出送至一个8选1多路选择器的其中5个输入雹核端(例如3位选李猜择控制信号为000~101选中的那5路输入)。
再设计一个编源扰掘码器,将5个按键编码成为000~101后送至8选1多路选择器的3位选择控制端就行了。
建议你先将BZQ,TSQ设成常数,再试试。看了你的代码,觉得除了设计之外,有几个问题。
1.verilog不是C语言。实现乘除法时,直接写运算符虽然可以综合,但逻辑很深,时序会很差。例如:if(cnt<(BZQ/TSQ)&&cnt>=(BZQ/TSQ)*duty/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。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)