verilog - 如何检查Verilog中的未知逻辑?

标签 verilog primes system-verilog

我正在检查 6n+1 或 6n-1 形式的数字的素数。我有下面的代码,但它似乎没有生成正确的结果。

    module prime(clk, rst, start, A, ready, P);

    input clk, rst, start;
    input [7:0] A;

    output ready, P;

    reg ready, P;

    reg [7:0] divisor;
    reg val;


    always @ (posedge clk or negedge rst) begin
        if (!rst) begin
            P <= 1'bx;
        end
        else if (start) 
        begin
            case (A)
               -1 : P <= 1;
                0 : P <= 1;
                1 : P <= 1;
                2 : P <= 1;
                3 : P <= 1;
                5 : P <= 1;
            endcase

            if (A%2 == 0 && A != 2) begin
                P <= 0;
                ready <= 1;
            end

            else if(A > 6) 
            begin
                for(divisor = 5; divisor <= A/divisor; divisor=divisor+6) begin
                    if (A%divisor == 0 || A%(divisor+2) == 0) begin
                        P <= 0;
                    end
                end 

                   if (P != 0 && P == 1'bx) begin // need to fix
                        P <= 1;
                    end
            end
        end
    end
endmodule

重点是这部分似乎不起作用:

if (P != 0 && P == 1'bx)

如何检查变量是否包含未知逻辑,即 x。按上述检查

P == 1'bx

似乎不起作用。

最佳答案

您应该使用大小写相等运算符(===)来测试4态逻辑相等,然后使用逻辑相等运算符( ==)。

对于 == 运算符,如果任一操作数包含 xz,则结果为 x >。 对于 === 运算符,具有 xz 的位包含在比较中。

关于verilog - 如何检查Verilog中的未知逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24465776/

相关文章:

generics - Verilog 中通用模块的实例化

verilog - 在 Verilog 中编码 RAM 的更好方法

Python 的reduce 函数混淆

verilog - 事件可以在 Systemverilog 中通过引用传递吗?

foreach - 如何使用foreach和fork并行执行某项操作?

syntax - 在模块声明中选择接口(interface)参数

verilog - 如何消除 Verilog 实例语法错误

verilog - 警告 : (vsim-7) Failed to open readmem file "mem_content_01.dat" in read mode

algorithm - 如何创建最紧凑的映射 n → isprime(n) 达到极限 N?

java - Java中数字的最大质因数