如何在Verilog中测试素性?
我有下面显示的Verilog代码,如果我试图编译它,就会收到一条错误消息。关键是我试图操纵一个输入,据我所知,这在Verilog中是无法完成的。关键是我需要在Verilog中检查以下条件:如何在Verilog中测试素性?,verilog,primes,system-verilog,primality-test,Verilog,Primes,System Verilog,Primality Test,我有下面显示的Verilog代码,如果我试图编译它,就会收到一条错误消息。关键是我试图操纵一个输入,据我所知,这在Verilog中是无法完成的。关键是我需要在Verilog中检查以下条件: static int prime(unsigned long long n) { unsigned long long val = 1; unsigned long long divisor = 5; if (n == 2 || n == 3) return 1;
static int prime(unsigned long long n)
{
unsigned long long val = 1;
unsigned long long divisor = 5;
if (n == 2 || n == 3)
return 1;
if (n < 2 || n%2 == 0 || n%3 == 0)
return 0;
for ( ; divisor<=n/divisor; val++, divisor=6*val-1)
{
if (n%divisor == 0 || n%(divisor+2) == 0)
return 0;
}
return 1;
}
static int prime(无符号长n)
{
无符号long val=1;
无符号长除数=5;
如果(n==2 | | n==3)
返回1;
如果(n<2 | | n%2==0 | | n%3==0)
返回0;
对于(;除数,Verilog BNF不允许(;;)
的中出现空语句或复合语句。请将文件更改为*.sv,以便根据SystemVerilog规则进行编译。否则,请将for循环语句更改为具有简单语句
for( divisor =5; divisor <= A/divisor; divisor=6*val-1) begin
if (A%divisor == 0 || A%(divisor+2) == 0) begin
P <= 0;
end
val++;
end
for(除数=5;除数也var
根本不需要for(除数=5;除数@Greg)您不能在每次迭代后简单地添加5。5+5=10,您根本不需要检查%10。如果需要,您可以使用for(step=2,divisor=5;divisor*divisor+5
是一个输入错误。我的意思是+6
。等等!你是说0和1是素数吗?我知道它们不是素数,而不是检查divisor@LưuVĩnhPhúc。但是在给我的任务中,我需要假设它们是素数,甚至不知道为什么。但是是的,2是最小的首要的
for( divisor =5; divisor <= A/divisor; divisor=6*val-1) begin
if (A%divisor == 0 || A%(divisor+2) == 0) begin
P <= 0;
end
val++;
end