1

我正在尝试理解这段 Verilog 代码..

reg [2:0] SYNC;
always @(posedge clk) SYNC <= {SYNC[1:0], ASYNC};
wire SYNC_risingedge = (SYNC[2:1] == 2'b01);
wire SYNC_fallingedge = (SYNC[2:1] == 2'b10);
wire SYNC_on = ~SYNC[1];

据我了解。产生一个 3 位寄存器 (sync) 当时钟上升时,sync 等于位 1 和 0 与 (async) 的当前值的组合。SYNC_risingedge 等于(同步)位 2 和 1 以及二进制“01”的值 SYNC_fallingedge 等于(同步)位 2 和 1 以及二进制“10”的值 SYNC_on 等于同步的倒数。

我的问题在引号中的行旁边。

reg [2:0] SYNC;
always @(posedge clk) SYNC <= {SYNC[1:0], ASYNC}; *"does this mean that it concentrates         the state of ASYNC with only bits 1 and 0?"*
wire SYNC_risingedge = (SYNC[2:1] == 2'b01); *"is the binary number 01 placed only in  bits 2 and 1? if so, how does it affect the previous line?"*
wire SYNC_fallingedge = (SYNC[2:1] == 2'b10); *"same question as previous line"*
wire SYNC_on = ~SYNC[1]; *"What does the [1] mean in ~SYNC[1]?"*

我在网上搜索过,寻找 Verilog 语法来理解这段代码,但没有找到。任何援助将不胜感激。

4

1 回答 1

2
  1. 问题 1

    always @(posedge clk) SYNC <= {SYNC[1:0], ASYNC};
    

    这是否意味着它将 ASYNC 的状态集中在仅位 1 和 0 上?

    我认为你的意思是“连接”,你说得对,是的。该语句实质上左移SYNC1,然后将 的值ASYNC放入位 0。此移位操作发生在每个时钟上升沿。

    完整表格:

       SYNC  |   ASYNC   |  New SYNC Setting
    ---------+-----------|--------------------
       000   |     0     |       000
       001   |     0     |       010
       010   |     0     |       100
       011   |     0     |       110
       100   |     0     |       000
       101   |     0     |       010
       110   |     0     |       100
       111   |     0     |       110
       000   |     1     |       001
       001   |     1     |       011
       010   |     1     |       101
       011   |     1     |       111
       100   |     1     |       001
       101   |     1     |       011
       110   |     1     |       101
       111   |     1     |       111
    
  2. 问题2

    wire SYNC_risingedge = (SYNC[2:1] == 2'b01);
    

    二进制数 01 是否只放在位 2 和 1 中?如果是这样,它如何影响上一行?

    不,这==是一个测试,而不是一个作业。如果这两个 SYNC 位匹配2b'01,则SYNC_risingedge线将为高电平。否则会很低。

    注意:“赋值”SYNC_risingedge是异步的——它只是组合逻辑。

  3. 问题 3

    wire SYNC_fallingedge = (SYNC[2:1] == 2'b10);
    

    与上一行相同的问题

    也是一样的答案。

  4. 问题 4

    wire SYNC_on = ~SYNC[1];
    

    ~SYNC[1] 中的 [1] 是什么意思?

    它只是指SYNC. 当 SYNC[1] 为低时,SYNC_on 为高,反之亦然。

于 2013-06-26T21:33:21.797 回答