Dieser Code beschreibt diesen Ausdruck ->(a+b)(c+d)
. Ich benutzte 2 Summierer, um zuerst a und b und dann c und d zu addieren. Und dann noch eins, um die Ergebnisse zu multiplizieren. Leider bin ich bei Verilog wirklich schlecht, daher kann ich nicht verstehen, was falsch ist.Sagen Sie mir, was mit diesem Code nicht stimmt
module automate(a,b,c,d,clk,start,result,ready);
parameter n=8;
input [7:0] a,b,c,d;
input start,clk;
output reg[17:0] result;
output reg ready;
reg[7:0] ra;
reg[7:0] rb;
reg[7:0] rc;
reg[7:0] rd;
reg[8:0] sm1;
reg[8:0] sm2;
reg[8:0] acc,q;
[email protected](posedge start)
begin
ra=a;
rb=b;
rc=c;
rd=d;
sm1=ra+rb;
sm2=rc+rd;
q=sm2;
acc=0;
ready=0;
repeat(9)
begin
@(posedge clk)
if(q[0])
acc=acc+sm1;
else
acc=acc;
q=q>>1;
q[8] = acc[0];
acc=acc>>1;
end
ready=1;
result={acc[8:0],q};
end
endmodule
Prüfstand:
module test_bench;
reg[7:0] a,b,c,d;
reg clk,start;
wire ready;
wire[17:0] result;
automate res(a,b,c,d,clk,start,result,ready);
initial begin
start = 0;
clk=0;
a=8'd7;
b=8'd5;
c=8'd9;
d=8'd3;
#30 start = 1;
wait(ready);
#20 start = 0;
#500 $finish;
end
always #10 clk=~clk;
endmodule
aber hier ist, was ich bekommen:
https://www.dropbox.com/s/1w6qbrmrj22f4gs/Untitled.png?dl=0 – Tatev
Meine Vermutung ist, dass Sie das Modul automatisieren, nicht die Testbench. –
Vielen Dank für Ihre Antwort. Ja, Sie haben Recht, ich simuliere das Modul automatisieren ... ist es falsch? Ich erhalte einen Fehler, wenn ich Wave Testbench hinzufüge -> https://www.dropbox.com/s/1w6qbrmrj22f4gs/Untitled.png?dl=0. Könnten Sie mir bitte sagen, was ich tun soll? – Tatev