Verilog的各种坑

  Verilog语言和软件语言不一样,有些时候理所当然的编写,也没有报语法错误,可是功能就是不对。唉,把遇到的坑都记在本篇博客吧。

  1. initial begin...end里面不能有always,如果非要在里面达到always的效果,那用forever就行了。

  2. reg   [3:0] a=4'd7; 这样写是对的,

    wire [3:0] a=4'd7; 这样写是错的。

  3. 时序电路建议赋初始值,组合电路则不需要。

  4. Verilog中不建议使用 * 和 / ,%可以偶尔使用。

  5. &&、||、!是逻辑符,结果为1(真)或0(假)。

   &、|、~ 是按位符,结果是化为2进制后,再按位进行比较后的结果。

  6. 三目运算符是允许嵌套的,例如:assign a = (b>6) ? 1 : (b<5) ? 1 : 0 ;

  7.如果你想表达 5 < a < 9,那么你直接这样写是错的,应该写成 5 < a && a < 9 ,不信?我们看看代码和波形!

 1 //======================================================================
 2 // --- 名称 : test
 3 // --- 作者 : xianyu_FPGA
 4 // --- 日期 : 
 5 // --- 描述 : 5<a<9  5<a && a<9 的区别
 6 /*          -----------------------------
 7             |   a   |   1  |  7  |  10  |
 8             -----------------------------
 9             | 希望的 |   0  |  1  |  0   |
10             -----------------------------
11             |  b_1  |   1  |  1  |  1   |
12             -----------------------------
13             |  b_2  |   0  |  1  |  0   |
14             -----------------------------
15             结论:b_2的表达方式才是对的!
16 */
17 //======================================================================
18 
19 module test
20 //---------------------<端口声明>---------------------------------------
21 (
22 input                   clk                 , //时钟,50Mhz
23 input                   rst_n               , //复位,低电平有效
24 input       [3:0]        a                    ,
25 output    reg                b_1                    ,
26 output    reg                b_2    
27 );
28 
29 //----------------------------------------------------------------------
30 //--   程序开始
31 //----------------------------------------------------------------------
32 always @(*)begin
33     if(5<a<9)
34         b_1 = 1;
35     else
36         b_1 = 0;
37 end
38 
39 always @(*)begin
40     if(5<a && a<9)
41         b_2 = 1;
42     else
43         b_2 = 0;
44 end
45 
46 endmodule

 8.组合逻辑中,如果en1有效是一种情况,en2有效是一种情况,en1||en2有效又是一种情况,那么en1||en2有效应该写在第一个,否则会导致逻辑错误。

9.本来[3:0]led==4’b1101

 

  (1) 如果led <= 1;led==4’b0001,如果led <= 4’b1111,则led==4’b1111

 

  (2) 如果led <= 0;led==4’b0000

 

10.[a-:b]:例如[23 -:8]等价于[23 : 16]

11.[7:0]a <= 1’b1 << cntcnt=0时,a=0000_0001cnt=1时,a=0000_0010,以此类推。

 

转载于:https://www.cnblogs.com/xianyufpga/p/11022625.html

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值