微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 寄存器类型能不能取或?

寄存器类型能不能取或?

时间: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是寄存器类型,那么红体语句到底是个什么意思?

你这样设计,组合罗技和时序逻辑混用,时序不好
不建议这样的设计

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的語法.

我明白了,谢谢兄弟们指点

我明白了,谢谢兄弟们指点,我是新手,语法比较薄弱



    ‘手打出哪个就用哪个。’看来是经验丰富哦,呵呵。

哈哈,也来凑个热闹!

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

网站地图

Top