|
|
  |
fixed-point, matlab, fpga - помогите разобраться |
|
|
|
Sep 5 2014, 13:08
|
fpga designer
   
Группа: Свой
Сообщений: 613
Регистрация: 20-04-08
Из: Зеленоград
Пользователь №: 36 928

|
CODE `timescale 1 ns / 1 ns
module Calc_X4 ( clk, reset_n, clk_enable, In1, ce_out, Out1 );
input clk; input reset_n; input clk_enable; input signed [15:0] In1; // sfix16_En10 output ce_out; output signed [15:0] Out1; // sfix16_En10
wire enb; reg signed [15:0] in_0_pipe_reg [0:2]; // sfix16 [3] wire signed [15:0] in_0_pipe_reg_next [0:2]; // sfix16_En10 [3] wire signed [15:0] In1_1; // sfix16_En10 wire signed [31:0] Gain4_mul_temp; // sfix32_En24 wire signed [15:0] Gain4_out1; // sfix16_En10 wire signed [15:0] Add6_out1; // sfix16_En10 wire signed [15:0] Saturation4_out1; // sfix16_En10 reg signed [15:0] Saturation4_out1_1; // sfix16_En10
assign enb = clk_enable;
always @(posedge clk) begin : in_0_pipe_process if (reset_n == 1'b0) begin in_0_pipe_reg[0] <= 16'sb0000000000000000; in_0_pipe_reg[1] <= 16'sb0000000000000000; in_0_pipe_reg[2] <= 16'sb0000000000000000; end else if (enb) begin in_0_pipe_reg[0] <= in_0_pipe_reg_next[0]; in_0_pipe_reg[1] <= in_0_pipe_reg_next[1]; in_0_pipe_reg[2] <= in_0_pipe_reg_next[2]; end end
assign In1_1 = in_0_pipe_reg[2]; assign in_0_pipe_reg_next[0] = In1; assign in_0_pipe_reg_next[1] = in_0_pipe_reg[0]; assign in_0_pipe_reg_next[2] = in_0_pipe_reg[1];
assign Gain4_mul_temp = 21105 * In1_1; assign Gain4_out1 = Gain4_mul_temp[29:14];
assign Add6_out1 = 10222 - Gain4_out1;
assign Saturation4_out1 = (Add6_out1 > 16'sb0100110000000000 ? 16'sb0100110000000000 : (Add6_out1 < 16'sb1011010000000000 ? 16'sb1011010000000000 : Add6_out1));
always @(posedge clk) begin : out_0_pipe_process if (reset_n == 1'b0) begin Saturation4_out1_1 <= 16'sb0000000000000000; end else if (enb) begin Saturation4_out1_1 <= Saturation4_out1; end end
assign Out1 = Saturation4_out1_1;
assign ce_out = clk_enable;
endmodule // Calc_X4 что-то не то... в модели delays блоков не ставил, поставил distributed pipelining в on, input pipieline - 3, output pipeline - 1
--------------------
|
|
|
|
|
Sep 8 2014, 03:29
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(_Ivan_33 @ Sep 5 2014, 20:08)  CODE `timescale 1 ns / 1 ns
module Calc_X4 ( clk, reset_n, clk_enable, In1, ce_out, Out1 );
input clk; input reset_n; input clk_enable; input signed [15:0] In1; // sfix16_En10 output ce_out; output signed [15:0] Out1; // sfix16_En10
wire enb; reg signed [15:0] in_0_pipe_reg [0:2]; // sfix16 [3] wire signed [15:0] in_0_pipe_reg_next [0:2]; // sfix16_En10 [3] wire signed [15:0] In1_1; // sfix16_En10 wire signed [31:0] Gain4_mul_temp; // sfix32_En24 wire signed [15:0] Gain4_out1; // sfix16_En10 wire signed [15:0] Add6_out1; // sfix16_En10 wire signed [15:0] Saturation4_out1; // sfix16_En10 reg signed [15:0] Saturation4_out1_1; // sfix16_En10
assign enb = clk_enable;
always @(posedge clk) begin : in_0_pipe_process if (reset_n == 1'b0) begin in_0_pipe_reg[0] <= 16'sb0000000000000000; in_0_pipe_reg[1] <= 16'sb0000000000000000; in_0_pipe_reg[2] <= 16'sb0000000000000000; end else if (enb) begin in_0_pipe_reg[0] <= in_0_pipe_reg_next[0]; in_0_pipe_reg[1] <= in_0_pipe_reg_next[1]; in_0_pipe_reg[2] <= in_0_pipe_reg_next[2]; end end
assign In1_1 = in_0_pipe_reg[2]; assign in_0_pipe_reg_next[0] = In1; assign in_0_pipe_reg_next[1] = in_0_pipe_reg[0]; assign in_0_pipe_reg_next[2] = in_0_pipe_reg[1];
assign Gain4_mul_temp = 21105 * In1_1; assign Gain4_out1 = Gain4_mul_temp[29:14];
assign Add6_out1 = 10222 - Gain4_out1;
assign Saturation4_out1 = (Add6_out1 > 16'sb0100110000000000 ? 16'sb0100110000000000 : (Add6_out1 < 16'sb1011010000000000 ? 16'sb1011010000000000 : Add6_out1));
always @(posedge clk) begin : out_0_pipe_process if (reset_n == 1'b0) begin Saturation4_out1_1 <= 16'sb0000000000000000; end else if (enb) begin Saturation4_out1_1 <= Saturation4_out1; end end
assign Out1 = Saturation4_out1_1;
assign ce_out = clk_enable;
endmodule // Calc_X4 что-то не то... в модели delays блоков не ставил, поставил distributed pipelining в on, input pipieline - 3, output pipeline - 1 по коду все верно. 3 на входе, 1 на выходе. что именно вам не нравится ?
--------------------
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|