openofdm初探之六:vivado环境下替代complex_mul.v

66 篇文章 23 订阅
58 篇文章 27 订阅

这里要删除掉verilog/coregen目录下complex_multilier.v,并且替换掉verilog下的complex_mult.v。

这个模块实现的是复数的乘法,两个复数相乘,每个复数的实部和虚部都是16位,产生一个实部和虚部都是32位的复数。在vivado使用complex multiplier,其设置如下:

 complex_mult.v代码如下:


module complex_mult
(
    input clock,
    input enable,
    input reset,

    input [15:0] a_i,
    input [15:0] a_q,
    input [15:0] b_i,
    input [15:0] b_q,
    input input_strobe,

    output reg [31:0] p_i,
    output reg [31:0] p_q,
    output output_strobe
);

 
reg [31:0]a ,b;
wire [64-1:0]  prod ;
  
reg input_strober ;
complex_multiplier mult_inst (
  .aclk(clock),                                 // input wire aclk
  .s_axis_a_tvalid(input_strober),        	// input wire s_axis_a_tvalid
  .s_axis_a_tdata(a),         	// input wire [31 : 0] s_axis_a_tdata
  .s_axis_b_tvalid(input_strober),        	// input wire s_axis_b_tvalid
  .s_axis_b_tdata(b),          	// input wire [31 : 0] s_axis_b_tdata
  .m_axis_dout_tvalid(output_strobe_w),  	// output wire m_axis_dout_tvalid
  .m_axis_dout_tdata(prod)    	// output wire [63 : 0] m_axis_dout_tdata
);

//如果时序不满足就采用时序电路  always @(posedge clock)  
//如果时序满足就采用组合电路    always @(*)  

//always @(posedge clock)  
always @(*) 

begin
	input_strober <= input_strobe ;
    output_strobe <= output_strobe_w ;
	/*
	if (reset) begin
 
        p_i <= 0;
        p_q <= 0; 
		{a,b}<=0;
    end else 
	*/
	if (enable) begin
 
		a <={a_i,a_q};
		b <={b_i,b_q};
        p_i <= prod[63:63-31];
        p_q <= prod[31:0];
    end
end
 
endmodule

以下是complex_multiplier.xci文件和complex_mult.v的网盘连接

链接:https://pan.baidu.com/s/1v4WIgXzor6kLEouXQfMPJQ 
提取码:0zm5  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值