fir321_st_u.v

来自「vhdl source,ver-fir-coefficient,simulink」· Verilog 代码 · 共 193 行

V
193
字号
// Generated by FIR Compiler
// ************************************************************
// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
// ************************************************************
// Copyright (C) 1991-2004 Altera Corporation
// Any megafunction design, and related net list (encrypted or decrypted),
// support information, device programming or simulation file, and any other
// associated documentation or information provided by Altera or a partner
// under Altera's Megafunction Partnership Program may be used only to
// program PLD devices (but not masked PLD devices) from Altera.  Any other
// use of such megafunction design, net list, support information, device
// programming or simulation file, or any other related documentation or
// information is prohibited for any other purpose, including, but not
// limited to modification, reverse engineering, de-compiling, or use with
// any other silicon devices, unless such use is explicitly licensed under
// a separate agreement with Altera or a megafunction partner.  Title to
// the intellectual property, including patents, copyrights, trademarks,
// trade secrets, or maskworks, embodied in any such megafunction design,
// net list, support information, device programming or simulation file, or
// any other related documentation or information provided by Altera or a
// megafunction partner, remains with Altera, the megafunction partner, or
// their respective licensors.  No other licenses, including any licenses
// needed under any third party's intellectual property, are provided herein.
module fir321_st_u (clk, 
              rst, 
              data_in, 
              coef_we, 
              coef_in, 
			 coef_in_clk,
              coef_set, 
              coef_set_in, 
              rdy_to_ld, 
              done, 
              fir_result); 
parameter DATA_WIDTH  = 4;
parameter COEF_WIDTH  = 16;
parameter COEF_WIDTH_IN = 18;
parameter COEF_SET_WIDTH = 2;
parameter ACCUM_WIDTH = 23;

input clk, rst;
input [DATA_WIDTH-1:0] data_in;
input coef_we; 
input [COEF_WIDTH_IN -1 :0] coef_in; 
input coef_in_clk;
input [COEF_SET_WIDTH-1:0] coef_set; 
input [COEF_SET_WIDTH-1:0] coef_set_in; 
output rdy_to_ld;
wire rdy_to_ld;
wire rdy_int;
wire rdy_int_ph;
output done;
wire done;
wire done_int;
output [ACCUM_WIDTH-1:0] fir_result;
wire tdl_ld;
wire sa_rst;
wire sa_inv;
wire pre_rdy;
wire sym_rst;
wire addr_low;
assign addr_low = 1'b0;
wire clk_en;
assign clk_en = 1'b1;
wire [COEF_SET_WIDTH-1 :0]coef_set_dly;
delay_trig_cen coef_set_reg(.clk(clk),.gclk_en(1'b1),.enable(pre_rdy), .data_in(coef_set),.data_out(coef_set_dly));
defparam coef_set_reg.IN_WIDTH = COEF_SET_WIDTH;
defparam coef_set_reg.WHOLE_DELAY = 1;
defparam coef_set_reg.FINE_DELAY = 1;
wire ser_eab_0_n;
wire ser_eab_1_n;
wire ser_dat_0_n;
par_ld_ser_tdl_wr Utdl_0_a(.clk(clk), .clk_en(clk_en), .rst(rst), .data_in(data_in), .tdl_upd(pre_rdy), .tdl_ld(rdy_int_ph),.data_out(ser_eab_0_n) );
defparam Utdl_0_a.WIDTH = 4;
assign ser_dat_0_n = ser_eab_0_n; 
wire ser_dat_1_n;
wire ser_dat_2_n;
wire ser_dat_3_n;
wire ser_dat_4_n;
wire [15:0]tdl_data_0_n;
lc_tdl_strat Utdl_0_n (
  .clk(clk),
  .rst(rst),
  .data_in(ser_eab_0_n),
  .data_out(tdl_data_0_n),
  .ntdl(ser_eab_1_n) 
);
defparam Utdl_0_n.CORE_WIDTH = 16;
defparam Utdl_0_n.DEPTH = 256;
defparam Utdl_0_n.DEPTH_ADDR = 8;
defparam Utdl_0_n.WIDTH = 4;
assign ser_dat_1_n = tdl_data_0_n[0];
assign ser_dat_2_n = tdl_data_0_n[1];
assign ser_dat_3_n = tdl_data_0_n[2];
assign ser_dat_4_n = tdl_data_0_n[3];
// --- ROM LUTs ---- 
wire [2:0]mem_wr_addr;
wire [4:0]wr_addr_comb;
assign wr_addr_comb = {coef_set_in_dly, mem_wr_addr };
wire [COEF_SET_WIDTH-1:0] coef_set_in_dly;
delay_mul_cen set_in_dly(.clk(coef_in_clk),
.rst(rst), .gclk_en(1'b1), .data_in(coef_set_in), 
.data_out(coef_set_in_dly));
defparam set_in_dly.IN_WIDTH = COEF_SET_WIDTH;
defparam set_in_dly.STORE_CELL = COEF_SET_WIDTH *3;
wire [1:0]coef_wr_mem;
wire one_mem_done;
addr_cnt_up addr_cnt(.clk(coef_in_clk), .cnt_out(mem_wr_addr),.cnt_done(one_mem_done), .enable(coef_we));
defparam addr_cnt.NUM_DATA = 8;
defparam addr_cnt.DATA_ADDR_WIDTH = 3;
defparam addr_cnt.STARTER = 6;	
mr_ser_shift_wr we_shift(.clk(coef_in_clk), .shift_out(coef_wr_mem),.shift_trig(one_mem_done), .enable(coef_we));	
defparam we_shift.SHIFT_WIDTH =2;	
defparam we_shift.OUT_WIDTH =2;	
defparam we_shift.POLY_FACT =4;	
defparam we_shift.POLY_WIDTH =2;	
wire [17:0] lut_val_0_n;
ram_lut Ur0_n(.clk_in(coef_in_clk), .clk_out(clk), .addr_in( {coef_set_dly[1],coef_set_dly[0],ser_dat_2_n,ser_dat_1_n,ser_dat_0_n } ), .wr_addr(wr_addr_comb),.wr_en(coef_wr_mem[1]),.data_in(coef_in),.data_out( lut_val_0_n[17:0]) ) ;
defparam Ur0_n.device_family = "stratix";
defparam Ur0_n.init_file = "fir321_coef_0.hex";
defparam Ur0_n.data_width = 18;
defparam Ur0_n.addr_width = 5;
defparam Ur0_n.depth = 32;
defparam Ur0_n.mem_core = "M512";
wire [17:0] lut_val_1_n;
ram_lut Ur1_n(.clk_in(coef_in_clk), .clk_out(clk), .addr_in( {coef_set_dly[1],coef_set_dly[0],addr_low,ser_dat_4_n,ser_dat_3_n } ), .wr_addr(wr_addr_comb),.wr_en(coef_wr_mem[0]),.data_in(coef_in),.data_out( lut_val_1_n[16:0]) ) ;
defparam Ur1_n.device_family = "stratix";
defparam Ur1_n.init_file = "fir321_coef_1.hex";
defparam Ur1_n.data_width = 17;
defparam Ur1_n.addr_width = 5;
defparam Ur1_n.depth = 32;
defparam Ur1_n.mem_core = "M512";
assign lut_val_1_n[17] = lut_val_1_n[16];
wire [18:0] tree_l_0_n_0_n;
sadd_lpm_cen Uaddl_0_n_0_n (.clk(clk),  .gclk_en(clk_en), .ain(lut_val_0_n), .bin(lut_val_1_n), .res(tree_l_0_n_0_n) );
defparam Uaddl_0_n_0_n.IN_WIDTH = 18;
defparam Uaddl_0_n_0_n.PIPE_DEPTH = 1;

wire [18:0] mac_res;
assign mac_res=tree_l_0_n_0_n;
wire [18:0] atree_res;
mac_tl Umtl (.clk(clk), 
             .data_in(mac_res),
             .data_out(atree_res));
defparam Umtl.DATA_WIDTH = 19;

// ---- Adder Tree Complete ---- 


wire [2:0] shft;
wire [19:0] accum;
scale_accum Usa ( .clk(clk), .rst(sa_rst), .inv(1'b0), .ain(atree_res), .accum_out(accum) );
defparam Usa.WIDTH_A = 19;


ser_shft Usershft( .clk(clk), .rst(1'b0), .ain(accum[0]), .shft_out(shft) );
defparam Usershft.SHIFT_WIDTH = 3;


wire    [22:0] fir_int_res;
scale_shft_comb Usscx (.clk(clk), .ce(done_int), .accum(accum), .shft(shft), .res(fir_int_res) );
defparam Usscx.WIDTH_ACCM = 20;
defparam Usscx.WIDTH_SHFT = 3;
defparam Usscx.WIDTH_RES = 23;

assign fir_result = fir_int_res[ACCUM_WIDTH-1:0];
assign rdy_to_ld = rdy_int;
ser_ctrl_cen Usc (.rst(rst), .clk(clk), .clk_en(1'b1), 
              .pre_rdy(pre_rdy), 
              .sa_rst_out(sa_rst), .ser_inv_out(sa_inv), 
              .rdy_to_ld(rdy_int), .sym_rst(sym_rst), 
              .tdl_ld(tdl_ld), .done_int(done_int), .done(done) ); 

defparam Usc.REG_LEN =4; 
defparam Usc.PIPE_DLY =1; 
defparam Usc.RST_DLY =3; 
defparam Usc.INV_DLY =0; 
defparam Usc.DONE_DLY =2; 
defparam Usc.DONE_HLD =4; 
defparam Usc.DONE_CNT_BIT =3; 

mr_lrdy_wr udsmrtdl(.clk(clk),										
                    .rst(rst),                               
                    .clk_en(1'b1),                 
                    .rdy_to_ld_int(rdy_int),                 
                    .rdy_out(rdy_int_ph)                     
				      );                                        
					                                        
defparam udsmrtdl.SIZE = 16;                      
defparam udsmrtdl.OUT_WIDTH = 4;
defparam udsmrtdl.CNT_VAL = 5;
endmodule

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?