verilog - verilog 中 {a,b} == 2'b10 和 a & ~b 之间的区别

标签 verilog

我刚刚开始学习 verilog,我试图创建一个找到序列 1010 的机器,所以我写了这个:

module Find1010(input clk, input in, output reg out);
    reg [1:0]st = 0;
    wire a = {st[0], in} == 2'b10;
    wire b = {st   , in} == 3'b101;
    always @(posedge clk)
    begin
        out  =   a & st[1];
        st   =  {a | b, in};
    end
endmodule

它起作用了,但后来我改变了行 wire a = {st[0], in} == 2'b10;

wire a = st[0] & ~in;然后输出始终为 0。为什么会发生这种情况以及 {st[0], in} == 2'b10 之间有什么区别和st[0] & ~in

这是我写的测试平台:

module Test;
    reg in = 0, clk = 1;
    wire result;
    initial begin
         #4 in = 1;
         #4 in = 0;
         #2 in = 1;
         #2 in = 0;
         #2 in = 1;
         #2 in = 0;
         #2 in = 1;
         #4 in = 0;
         #2 in = 1;
         #2 in = 0;
         #3 $finish;
    end
    initial forever #1 clk = ~clk;
    always @(negedge clk)
        $display("Input: %b    Output: %b", in , result);
    Find1010 Mealy_Machine(
        .clk(clk),
        .in(in),
        .out(result)
    );
endmodule

最佳答案

没有区别(除非涉及 X)

问题是您的测试台中存在竞争条件。您需要对 in 使用非阻塞赋值。或者更改时钟周期,以便对 in 的更改不会落在时钟边沿。

关于verilog - verilog 中 {a,b} == 2'b10 和 a & ~b 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47914476/

相关文章:

verilog - 如何以现实的方式实现存储字节和存储半字

verilog - 如何将固定分数应用于整数

c - PLI Verilog : how to restart a simulation

verilog - 如何使用 VPI PLI 查找两个 Verilog 模块是否连接 - Verilog VCS

在 System Verilog 中打印打包结构

Verilog 二进制加法

verilog - 寄存器文件未读取任何数据

verilog - 在综合中应该避免哪些 SystemVerilog 特性?

loops - 如何在 verilog 中不使用 while() 循环(用于综合)?

hash - 哈希算法的组合实现