我以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&#39; bx
似乎无法正常工作。
答案 0 :(得分:2)
您应该使用case equality
运算符(===
)来测试4状态逻辑相等,然后使用logical equality
运算符(==
)。
对于==
运算符,如果任一操作数包含x
或x
,则结果为z
。
对于===
运算符位,x
和z
包含在比较中。