寄存器类型能不能取或?
时间:10-02
整理:3721RD
点击:
代码如下
always @(posedge clk)
if(!rst) dcnt <= #1 4'h0;
else
if(ld) dcnt <= #1 4'hb;
else
if(|dcnt) dcnt <= #1 dcnt - 4'h1;
always @(posedge clk) done <= #1 !(|dcnt[3:1]) & dcnt[0] & !ld;
always @(posedge clk) if(ld) text_in_r <= #1 text_in;
always @(posedge clk) ld_r <= #1 ld;
reg [3:0] dcnt; dcnt是寄存器类型,那么红体语句到底是个什么意思?
always @(posedge clk)
if(!rst) dcnt <= #1 4'h0;
else
if(ld) dcnt <= #1 4'hb;
else
if(|dcnt) dcnt <= #1 dcnt - 4'h1;
always @(posedge clk) done <= #1 !(|dcnt[3:1]) & dcnt[0] & !ld;
always @(posedge clk) if(ld) text_in_r <= #1 text_in;
always @(posedge clk) ld_r <= #1 ld;
reg [3:0] dcnt; dcnt是寄存器类型,那么红体语句到底是个什么意思?
你这样设计,组合罗技和时序逻辑混用,时序不好
不建议这样的设计
dcnt如果不为0的话,dcnt减1。
这段代码来自aes加密算法aes_cipher_top.v文件,应该没什么问题。我的疑问是:|是或,而dcnt表示的是寄存器类型,if(|dcnt) 这样一个判断条件究竟是什么意思?
你的意思我明白,但是判断条件if(|dcnt) 中|不是!,所以我很头疼。
你这个所谓的加密算法,个人确实感觉不咋的,连最起码的复位都没有
不过解答你的问题
那个是按位的或操作,例如cnt=4‘b1010,那么 |cnt=’1‘ | '0' | '1' | '0'=1
这个我经常用啊。就是等效于if( dcnt > 0 ) dcnt <= dcnt - 1'b1;..
还有一种呢if( !&dcnt ) dcnt <= dcnt + 1'b1; 等效于if( dcnt != 5'b11111 ) dcnt <= dcnt + 1'b1;
随便怎么写都可以,没必要讨论,你综合出来的电路都是一模一样的,有意思么?手打出哪个就用哪个。
7楼正解啊,哈哈
问题很好,7楼解答的很有深度。顶起。
建議先看一下VERILOG的語法.
我明白了,谢谢兄弟们指点
我明白了,谢谢兄弟们指点,我是新手,语法比较薄弱
‘手打出哪个就用哪个。’看来是经验丰富哦,呵呵。
哈哈,也来凑个热闹!
