集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1475|回复: 0

求高手解释

[复制链接]
qq181022849 发表于 2011-6-16 21:04:41 | 显示全部楼层 |阅读模式
本帖最后由 qq181022849 于 2011-6-16 21:12 编辑

我用matlab设计个butterworth滤波器这个图是得到的一些数据  请问这些数据就是这个4*6的矩阵在我的程序中是怎么用的??我给老师说是ise处理不了小数,她说我说的不对,不知道怎么给她解释
程序

Testbench.v是测试工程;
Butterworth.v是顶层文件;
Sub2.v是第二层文件。
2.1        Butterworth.v
`timescale 1ns / 1ps

module butterworth(
        clk,
        reset,
        x_in,
        y_out
    );

input clk;
input reset;
input[15:0] x_in;
output[15:0] y_out;

wire[15:0] y1_out;
wire[15:0] y2_out;
wire[15:0] y3_out;

// the coefs of the filter
wire [15:0] a_1,a_2;
wire [15:0] b1_1_1,b1_2_1;
wire [15:0] b2_1_1,b2_2_1;
wire [15:0] b3_1_1,b3_2_1;
wire [15:0] b4_1_1,b4_2_1;

assign a_1 = 16'b0100000000000000;
assign a_2 = 16'b0010000000000000;
assign b1_1_1 = 16'b1101111110000011;
assign b1_2_1 = 16'b0001011101000111;
assign b2_1_1 = 16'b1110011000001100;
assign b2_2_1 = 16'b0000110000100111;
assign b3_1_1 = 16'b1110100110000011;
assign b3_2_1 = 16'b0000011001000011;
assign b4_1_1 = 16'b1110101100000110;
assign b4_2_1 = 16'b0000001110110000;

sub2 sub2_1(.clk(clk),.reset(reset),.a_1_1(a_1),.a_2_1(a_2),.b_1_1(b1_1_1),.b_2_1(b1_2_1),.x_in(x_in),.y_out(y1_out));
sub2 sub2_2(.clk(clk),.reset(reset),.a_1_1(a_1),.a_2_1(a_2),.b_1_1(b2_1_1),.b_2_1(b2_2_1),.x_in(y1_out),.y_out(y2_out));
sub2 sub2_3(.clk(clk),.reset(reset),.a_1_1(a_1),.a_2_1(a_2),.b_1_1(b3_1_1),.b_2_1(b3_2_1),.x_in(y2_out),.y_out(y3_out));
sub2 sub2_4(.clk(clk),.reset(reset),.a_1_1(a_1),.a_2_1(a_2),.b_1_1(b4_1_1),.b_2_1(b4_2_1),.x_in(y3_out),.y_out(y_out));

endmodule


2.2        Sub2.v
`timescale 1ns / 1ps
module sub2(
        clk,
        reset,
        a_1_1,
        a_2_1,
        b_1_1,
        b_2_1,
        x_in,
        y_out
    );

input clk;
input reset;

input [15:0] a_1_1;
input [15:0] a_2_1;
input [15:0] b_1_1;
input [15:0] b_2_1;
input [15:0] x_in;
output [15:0] y_out;

reg[31:0] x_temp;
reg[31:0] y_temp;
reg[15:0] y_out;

wire [31:0] p1,p2,p3,p4,p5;
wire [32:0] y_t;

MULTIPLY mult1(.dataa(x_temp[31:16]),.datab(a_2_1),.result(p1));
MULTIPLY mult2(.dataa(x_temp[15:0]),.datab(a_1_1),.result(p2));
MULTIPLY mult3(.dataa(x_in[15:0]),.datab(a_2_1),.result(p3));
MULTIPLY mult4(.dataa(y_temp[31:16]),.datab(b_2_1),.result(p4));
MULTIPLY mult5(.dataa(y_temp[15:0]),.datab(b_1_1),.result(p5));

always@(posedge clk)
begin
        if(!reset)
                begin
                        x_temp <= 0;
                        y_temp <= 0;
                end
        else
                begin
                        x_temp[31:0] <= {x_temp[15:0],x_in};
                        y_temp[31:0] <= {y_temp[15:0],y_out};
                end
       
        if(y_t[32:30]== 3'b000 ||y_t[32:30]== 3'b111 )
                y_out <= y_t[30:15];
        else if(y_t[32] == 1)
                y_out <= 16'b 1000000000000000;
        else
                y_out <= 16'b 0111111111111111;
               
end

assign y_t = reset? ({p1[31],p1} + {p2[31],p2} + {p3[31],p3} - {p4[31],p4} - {p5[31],p5}):0;

//assign y_out[15:0] = {y_t[32],y_t[28:14]};

Endmodule

2.3        Testbench.v
`timescale 1 ps/ 1 ps
module testbench();
reg clk;
reg reset;
reg [15:0] x_in;
wire [15:0] y_out;

reg [15:0] memory [1000:0];
reg [9:0] i;

integer x_datain;
integer y_dataout;

initial                                                
begin
        reset = 0;
        clk = 0;
       
        i= 0;
        #50 reset = 1;
        x_in = 0;
       
        x_datain =$fopen("sourceData.txt","r");
        $readmemb("sourceData.txt",memory);
        y_dataout = $fopen("finalData.txt","w");
        $display("Running testbench");                       
end  

always #1 clk = ~clk;   

always@(posedge clk)              
begin                                                  
        if(i==10'd1000)
                begin
                        i <= 0;       
                end
        else
                i <= i+1;
               
        x_in <=memory;
       
        $display("%b\n",y_out);
        //$fdisplay(y_dataout,"\n%b",y_out);
end  
               
butterworth i1(
        .clk(clk),
        .reset(reset),
        .x_in(x_in),
        .y_out(y_out)
);
                                                
endmodule

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-6-23 13:26 , Processed in 0.083427 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表