H
hoangthanhtung
Guest
Это код для осуществления РПИ в Verilog для FPGA.
Я имитируемых ему Кью (на) rtus 4.0 и обнаружить, что результат не является исправлением в первом цикле, но исправить во втором цикле.Я не могу объяснить, что причина?
Я придаю моей моделирования файл и знак ошибки в течение двух циклов.
Кто-нибудь может мне помочь?//************************************************ *********
/ / IEEE STD 1364-1995 Verilog файла: fir_gen.v
/ / Автор-EMAIL: Uwe.Meyer-Baese (AT) ieee.org
//************************************************ *********
/ / Это общая РПИ фильтр генератор
/ / Он использует W1 битных данных / коэффициентов бит
Модуль fir_gen (CLK, Load_x, x_in, c_in, y_out);
//------------------------------------------------ ---------
Параметр W1 = 9, / / ширина входного битных
W2 = 18, / / Multiplier битной шириной 2 * W1
L = 4, / / длина фильтра или номер водопроводной
W3 = 19, / / ширина Гадюка = W2 log2 (L) -1
W4 = 11, / / Output битной ширине
Mpipe = 3 / / Трубопроводный шаг множителя
ввод CLK, Load_x / / std_logic
вход [W1-1: 0] x_in, c_in / / Материалы = 9 бит
производства [W4-1: 0] y_out; / / Итоги производства 11 бит = 10 бит данных,
1 бит сигнала
рег [W1-1: 0] X;
проволока [W3-1: 0] Y;
/ / 2D массив типов
т.е. память не поддерживается MaxPlusII
/ / В Verilog, поэтому использование одного вектора
рег [W1-1: 0] c0, C1, C2, C3; / / Коэффициент массив
проволока [W2-1: 0] p0, P1, P2, P3; / / Продукт массив
рег [W3-1: 0] a0, A1, A2, A3 / / Гадюка массив
проволока [W2-1: 0] сумма; / / вспомогательная сигналов
проволока clken, aclr;
//----> LOAD DATA или Коэфициент
всегда @ (posedge CLK)
начала: Загрузить
если (Load_x == 0)
начинать
/ / Коэффициенты сдвига одной
/ / Store коэффициента в реестр
c3 <= c_in;
c2 <= c3;
c1 <= c2;
c0 <= C1;
конец
еще
начинать
X <= x_in / / получить данные выборки по времени
конец
конец
//----> Вычисления суммы из-продуктов
всегда @ (posedge CLK)
начала: SOP
/ / Вычислить перенесены фильтр дополнения
/ / W2 = 18: Multiplier битной шириной 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 / / Первый ТКП лишь зарегистрироваться
конец
присвоить Y = a0;
/ / Инстанцирует L pipelined множитель
lpm_mult mul_0 / / Умножить X * c0 = p0
(. Часы (CLK),. dataa (X),. datab (c0),. результата (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 = "подписанных";
lpm_mult mul_1 / / Умножить X * c1 = P1
(. Часы (CLK),. dataa (X),. datab (C1),. результата (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 = "подписанных";
lpm_mult mul_2 / / Умножить X * c2 = p2
(. Часы (CLK),. dataa (X),. datab (С2),. результата (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 = "подписанных";
lpm_mult mul_3 / / Умножить X * c3 = P3
(. Часы (CLK),. dataa (X),. datab (C3),. результатом (3));
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 = "подписанных";
присвоить y_out = Y [W3-1: W3-W4];
endmodule
Извините, но вам необходимо войти в аккаунт это вложение
Я имитируемых ему Кью (на) rtus 4.0 и обнаружить, что результат не является исправлением в первом цикле, но исправить во втором цикле.Я не могу объяснить, что причина?
Я придаю моей моделирования файл и знак ошибки в течение двух циклов.
Кто-нибудь может мне помочь?//************************************************ *********
/ / IEEE STD 1364-1995 Verilog файла: fir_gen.v
/ / Автор-EMAIL: Uwe.Meyer-Baese (AT) ieee.org
//************************************************ *********
/ / Это общая РПИ фильтр генератор
/ / Он использует W1 битных данных / коэффициентов бит
Модуль fir_gen (CLK, Load_x, x_in, c_in, y_out);
//------------------------------------------------ ---------
Параметр W1 = 9, / / ширина входного битных
W2 = 18, / / Multiplier битной шириной 2 * W1
L = 4, / / длина фильтра или номер водопроводной
W3 = 19, / / ширина Гадюка = W2 log2 (L) -1
W4 = 11, / / Output битной ширине
Mpipe = 3 / / Трубопроводный шаг множителя
ввод CLK, Load_x / / std_logic
вход [W1-1: 0] x_in, c_in / / Материалы = 9 бит
производства [W4-1: 0] y_out; / / Итоги производства 11 бит = 10 бит данных,
1 бит сигнала
рег [W1-1: 0] X;
проволока [W3-1: 0] Y;
/ / 2D массив типов
т.е. память не поддерживается MaxPlusII
/ / В Verilog, поэтому использование одного вектора
рег [W1-1: 0] c0, C1, C2, C3; / / Коэффициент массив
проволока [W2-1: 0] p0, P1, P2, P3; / / Продукт массив
рег [W3-1: 0] a0, A1, A2, A3 / / Гадюка массив
проволока [W2-1: 0] сумма; / / вспомогательная сигналов
проволока clken, aclr;
//----> LOAD DATA или Коэфициент
всегда @ (posedge CLK)
начала: Загрузить
если (Load_x == 0)
начинать
/ / Коэффициенты сдвига одной
/ / Store коэффициента в реестр
c3 <= c_in;
c2 <= c3;
c1 <= c2;
c0 <= C1;
конец
еще
начинать
X <= x_in / / получить данные выборки по времени
конец
конец
//----> Вычисления суммы из-продуктов
всегда @ (posedge CLK)
начала: SOP
/ / Вычислить перенесены фильтр дополнения
/ / W2 = 18: Multiplier битной шириной 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 / / Первый ТКП лишь зарегистрироваться
конец
присвоить Y = a0;
/ / Инстанцирует L pipelined множитель
lpm_mult mul_0 / / Умножить X * c0 = p0
(. Часы (CLK),. dataa (X),. datab (c0),. результата (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 = "подписанных";
lpm_mult mul_1 / / Умножить X * c1 = P1
(. Часы (CLK),. dataa (X),. datab (C1),. результата (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 = "подписанных";
lpm_mult mul_2 / / Умножить X * c2 = p2
(. Часы (CLK),. dataa (X),. datab (С2),. результата (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 = "подписанных";
lpm_mult mul_3 / / Умножить X * c3 = P3
(. Часы (CLK),. dataa (X),. datab (C3),. результатом (3));
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 = "подписанных";
присвоить y_out = Y [W3-1: W3-W4];
endmodule
Извините, но вам необходимо войти в аккаунт это вложение