在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2070|回复: 5

[求助] 菜鸟请教大牛一段代码的问题

[复制链接]
发表于 2011-9-22 18:38:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本人刚刚学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
发表于 2011-9-22 20:08:23 | 显示全部楼层
输出时钟低电平多了一个系统时钟周期,替换为else if (10<= cnt < 19) begin试试看,这种情况一般用工具仿真一遍就比较容易看出来了。
发表于 2011-9-22 21:38:47 | 显示全部楼层
verilog没有这种表示方法:10<= cnt < 20,其中只要 cnt < 20就是了
 楼主| 发表于 2011-9-22 23:26:32 | 显示全部楼层
谢谢上面两位大牛的回复,综合您两位的说法就解决了这个问题。else if (10<= cnt < 20)改为 else if (cnt < 19)就可以了。
不过有个问题,为什么当写成else if (10<=cnt<19)的时候, 寄存器变量cnt 仿真的结果还是从0 变到 2047呢, 是不是verilog的语法有相关的规定?还是硬件原因呢?
发表于 2011-9-23 08:47:01 | 显示全部楼层
if (10<=cnt<19)等价于
if( (10<=cnt) <19)
而(10<=cnt)的结果不是1就是0,永远都小于19,永远真。
 楼主| 发表于 2011-9-23 09:24:38 | 显示全部楼层
谢谢版主,终于明白了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-21 23:35 , Processed in 0.027639 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表