打印
[FPGA]

verilog hdl程序问题

[复制链接]
1169|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tgi8i|  楼主 | 2014-3-26 21:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
module buzz ( CLK,BUZZ);
        input CLK;
        output BUZZ;
        reg buzzout_reg;
        reg [31:0] counter;
       
        always @ (posedge CLK)
        begin
                counter=counter+1;
        end

        always @ (counter[6])
        begin
                buzzout_reg=!(counter[21]& counter[23]& ~counter[26]);
        end

assign BUZZ=buzzout_reg;
endmodule


上诉程序的第二个always语句不是只要后面的counter【6】改变了就执行的吗?那为什么在第二个always中会用到counter【21】,counter[23],counter【26】的值呢,按理说应该这些值还没改变啊。

相关帖子

沙发
hjz07091982| | 2014-3-26 21:58 | 只看该作者
同问

使用特权

评论回复
板凳
ifpga| | 2014-3-27 09:21 | 只看该作者
首先,这样写代码应该是不推荐的
推荐做法应该是把所有的敏感变量,全放到@后
或者直接使用 @*

其次,这样写结果应该是 [6] == 1'b1时,寄存器进行一次赋值

使用特权

评论回复
地板
tgi8i|  楼主 | 2014-3-27 10:01 | 只看该作者
ifpga 发表于 2014-3-27 09:21
首先,这样写代码应该是不推荐的
推荐做法应该是把所有的敏感变量,全放到@后
或者直接使用 @*

恩 是在第一次[6]=1'B1时,进行的赋值,但是这第一次赋值时,counter只变化到第六位啊,后面的21,23和26位还没变化啊,记这些值应该是0吧?

使用特权

评论回复
5
ifpga| | 2014-3-27 10:08 | 只看该作者
tgi8i 发表于 2014-3-27 10:01
恩 是在第一次[6]=1'B1时,进行的赋值,但是这第一次赋值时,counter只变化到第六位啊,后面的21,23和26 ...

无所谓的啊
只是 [6] == 1'b1, 时执行一次赋值操作
不管等式右方运算结果是什么
PS:不要迷信别人的代码,很多人的代码写得是有问题的

使用特权

评论回复
6
bitshiyan| | 2014-3-27 15:07 | 只看该作者
counter【6】为1的时候才执行

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

115

帖子

0

粉丝