微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 菜鸟请教大牛一段代码的问题

菜鸟请教大牛一段代码的问题

时间:10-02 整理:3721RD 点击:
本人刚刚学FPGA,用verilog写了 个20分频,占空比是50%的代码,但是结果不对。不知道问题出在哪儿了,请教高手们问题出在哪儿?
module fenpin(gclk_20m, encoder_clock);
input gclk_20m;
output encoder_clock;
reg encoder_clock;
reg [10:0] cnt = 11'b00000000000;
always @ (posedge gclk_20m)   
begin
if (cnt <= 9) begin
  cnt <= cnt+1;
  encoder_clock <= 1;
end
else if (10<= cnt < 20) begin
  cnt <= cnt+1;
  encoder_clock <= 0;
end
else begin
  cnt <= 0;
end
end
endmodule

输出时钟低电平多了一个系统时钟周期,替换为else if (10<= cnt < 19) begin试试看,这种情况一般用工具仿真一遍就比较容易看出来了。

verilog没有这种表示方法:10<= cnt < 20,其中只要 cnt < 20就是了

谢谢上面两位大牛的回复,综合您两位的说法就解决了这个问题。else if (10<= cnt < 20)改为 else if (cnt < 19)就可以了。
不过有个问题,为什么当写成else if (10<=cnt<19)的时候, 寄存器变量cnt 仿真的结果还是从0 变到 2047呢, 是不是verilog的语法有相关的规定?还是硬件原因呢?

if (10<=cnt<19)等价于
if( (10<=cnt) <19)
而(10<=cnt)的结果不是1就是0,永远都小于19,永远真。

谢谢小编,终于明白了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top