我有这个Systemverilog代码的问题。 我是这个语言的新手,非常不方便 找到有关此语言的文件。 这里是代码:使用always_comb构造的Systemverilog问题
模块mult(被乘数,乘数,Product,clk,clear,Startm,endm);
input [31:0] multiplicand;
input [31:0] multiplier ;
input clk;
input clear;
input Startm;
output logic [63:0] Product;
output logic endm;
enum logic [1:0] { inicio, multiplicar, nao_multiplicar, fim } estados;
logic [1:0] state;
logic [31:0] mplier;
logic [31:0] mplier_aux;
logic [31:0] mcand ;
logic [31:0] mcand_aux;
logic [63:0] Prod ;
logic [63:0] Prod_aux;
logic [5:0] cont;
logic [5:0] cont_aux;
initial begin
mplier = multiplier;
mplier_aux = multiplier;
mcand = multiplicand;
mcand_aux = multiplicand;
Prod = 0;
Prod_aux = 0;
state = inicio;
cont = 0;
cont_aux = 0;
end
always_ff @(posedge clk)
begin
if(clear)
begin
state <= inicio;
end
else if (Startm)
begin
case(state)
inicio :
begin
if(mplier[0] == 0)
begin
state <= nao_multiplicar;
end
else if(mplier[0] == 1)
begin
state <= multiplicar;
end
end
multiplicar :
begin
if(cont == 32)
state <= fim;
else if(mplier[0] == 0)
begin
state <= nao_multiplicar;
end
else if(mplier[0] == 1)
begin
state <= multiplicar;
end
end
nao_multiplicar:
begin
if(cont == 32)
state <= fim;
else if(mplier[0] == 0)
begin
state <= nao_multiplicar;
end
else if(mplier[0] == 1)
begin
state <= multiplicar;
end
end
fim:
begin
state <= inicio;
end
endcase
end
end
always_comb
begin
case(state)
inicio:
begin
mplier = multiplier;
mcand = multiplicand;
Prod = 0;
cont_aux = cont + 1;
cont = cont_aux;
end
multiplicar:
begin
mcand_aux = mcand << 1;
mcand = mcand_aux ;
mplier_aux = mplier >> 1;
mplier = mplier_aux ;
Prod_aux = Prod + mcand;
Prod = Prod_aux;
cont_aux = cont + 1;
cont = cont_aux;
end
nao_multiplicar:
begin
cont_aux = cont + 1;
cont = cont_aux;
end
fim:
begin
Product = Prod;
endm = 1;
end
endcase
end
endmodule
我试图写有32位输入和使用 布斯的algoritm 64位的产品乘数。发生此错误:“always_comb构造不会推断纯粹的组合逻辑”。为什么会发生?
一个最小的例子,显示你的问题会hlep。 – 2011-05-21 17:14:08