Alle kan rette op på denne fejl?

H

hoangthanhtung

Guest
Dette er koden til at gennemføre FIR ved Verilog til FPGA.
Jeg har simuleret det ved qu (at) rtus 4.0 og konstatere, at resultatet ikke er rettet i den første etape, men korrigeret i den anden cyklus.Jeg kan ikke forklare hvorfor?

Jeg lægger min simulation filen og markerer fejl i to runder.

Alle kan hjælpe mig?//************************************************ *********
/ / IEEE STD 1364-1995 Verilog fil: fir_gen.v
/ / Forfatter-email: Uwe.Meyer-Baese (at) ieee.org
//************************************************ *********
/ / Dette er en generisk FIR filter generator
/ / Det bruger W1 bit data / koefficienter bits
modul fir_gen (CLK, Load_x, x_in, c_in, y_out);
//------------------------------------------------ ---------
parameter W1 = 9, / / Input bit bredde
W2 = 18, / / Multiplikator bit bredde 2 * W1
L = 4 / / Filter længde eller antallet af hanen
W3 = 19, / / adder width = W2 log2 (L) -1
W4 = 11, / / Output bit bredde
Mpipe = 3 / / Pipeline trin i multiplikatoreffekter

input CLK, Load_x / / std_logic
input [W1-1: 0] x_in, c_in / / Indgange = 9 bits
output [W4-1: 0] y_out / / Resultater output 11 bits = 10 bits data
1 bits signal

reg [W1-1: 0] x;
wire [W3-1: 0] y;

/ / 2D array typer dvs memories ikke understøttes af MaxPlusII
/ / i Verilog, brug derfor enkelt vektorer

reg [W1-1: 0] C0, C1, C2, C3; / / Koefficient array
wire [W2-1: 0] P0, P1, P2, P3; / / Produkt array
reg [W3-1: 0] A0, A1, A2, A3 / / adder array

wire [W2-1: 0] sum; / / Auxilary signaler
wire clken, aclr;

//----> Lastelinjer Data eller Koefficient
altid @ (posedge CLK)
begynder: Load
if (Load_x == 0)
begynd
/ / Koefficienter flytte en
/ / Store koefficient i register
C3 <= c_in;
c2 <= C3;
c1 <= c2;
C0 <= c1;
ende
anden
begynd
x <= x_in / / Få en stikprøve på et tidspunkt
ende
ende

//----> Compute sum-of-produkter
altid @ (posedge CLK)
begynder: SOP
/ / Compute den omsat filter tilføjelser
/ / W2 = 18: Multiplikator bit bredde 2 * W1
A0 <= (p0 [W2-1], p0) A1;
a1 <= (p1 [W2-1], p1) A2;
A2 <= (p2 [W2-1], p2) a3;
a3 <= (P3 [W2-1], p3) 19'd00000; / / First TAP har kun et register
ende
tildele y = A0;

/ / Instantiate L pipelined multiplikatoreffekter
lpm_mult mul_0 / / Multiplicer x * C0 = p0
(. ur (CLK). dataa (x),. datab (C0),. resultat (p0));
defparam mul_0.lpm_widtha = W1;
defparam mul_0.lpm_widthb = W1;
defparam mul_0.lpm_widthp = W2;
defparam mul_0.lpm_widths = W2;
defparam mul_0.lpm_pipeline = Mpipe;
defparam mul_0.lpm_representation = "underskrevet";

lpm_mult mul_1 / / Multiplicer x * c1 = p1
(. ur (CLK). dataa (x),. datab (C1). resultat (p1));
defparam mul_1.lpm_widtha = W1;
defparam mul_1.lpm_widthb = W1;
defparam mul_1.lpm_widthp = W2;
defparam mul_1.lpm_widths = W2;
defparam mul_1.lpm_pipeline = Mpipe;
defparam mul_1.lpm_representation = "underskrevet";

lpm_mult mul_2 / / Multiplicer x * c2 = p2
(. ur (CLK). dataa (x),. datab (c2). resultat (p2));
defparam mul_2.lpm_widtha = W1;
defparam mul_2.lpm_widthb = W1;
defparam mul_2.lpm_widthp = W2;
defparam mul_2.lpm_widths = W2;
defparam mul_2.lpm_pipeline = Mpipe;
defparam mul_2.lpm_representation = "underskrevet";

lpm_mult mul_3 / / Multiplicer x * C3 = p3
(. ur (CLK). dataa (x),. datab (C3). resultat (p3));
defparam mul_3.lpm_widtha = W1;
defparam mul_3.lpm_widthb = W1;
defparam mul_3.lpm_widthp = W2;
defparam mul_3.lpm_widths = W2;
defparam mul_3.lpm_pipeline = Mpipe;
defparam mul_3.lpm_representation = "underskrevet";

tildele y_out = y [W3-1: W3-W4];

endmodule

 
Kan du sende mig den verilog modul filen for lpm_mult mul_2?
Og en verilog testbench?Så jeg kan genskabe problemet her!

 
nand_gates wrote:

Kan du sende mig den verilog modul filen for lpm_mult mul_2?

Og en verilog testbench?
Så jeg kan genskabe problemet her!
 

Welcome to EDABoard.com

Sponsor

Back
Top