专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
FPGA
FIR滤波器的设计
2019-07-15 21:44
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
FPGA
3807
6
1537
从书上找到的fir并行设计程序,对代码几点不太理解:1、移位寄存为什么还要把数据的高位也再次存进去?
2、在设置mult ip核的时候,在设置里面会有乘法是否设置 unsigned和signed,那在第一个问题的基础上,我是设置unsigned还是signed?
3、滤波器的设计,我要给他什么样子的输入,
仿真
看得出什么样子的结果?
部分代码如下
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
YIKE123
1楼-- · 2019-07-15 23:17
精彩回答 2 元偷偷看……
加载中...
YIKE123
2楼-- · 2019-07-15 23:25
module fir(
input clk,
input rst_n,
input [11:0] fir_in, // 12位输入
output reg [26:0] fir_out //27位输出
);
//------------------------------------------------
parameter cof1 = 12'd41;
parameter cof2 = 12'd132;
parameter cof3 = 12'd341;
parameter cof4 = 12'd510;
//------------------------------------------------
reg [11:0] fir_in_reg;
reg [12:0] shift_buf [7:0];//定义8个13位寄存器
//------------------------------------------------
wire [12:0] add07;
wire [12:0] add16;
wire [12:0] add25;
wire [12:0] add34;//对称性前后两个相加
wire [24:0] mul1;
wire [24:0] mul2;
wire [24:0] mul3;
wire [24:0] mul4;//系数相乘(12位)
//------------------------------------------------
integer i,j;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
fir_in_reg <= 12'd0;
else
fir_in_reg <= fir_in;
end
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
for(i=0;i <= 7;i=i+1)
shift_buf[i] <= 13'd0;
else
begin
for(j=0;j < 7;j=j+1)
shift_buf[j+1] <= shift_buf[j];
shift_buf[0] <= {fir_in_reg[11],fir_in_reg};
end
end
//----------------------------------------------------
assign add07 = shift_buf[0] + shift_buf[7];
assign add16 = shift_buf[1] + shift_buf[6];
assign add25 = shift_buf[2] + shift_buf[5];
assign add34 = shift_buf[3] + shift_buf[4];
//----------------------------------------------------
mult1 mult_inst1(
.dataa(cof1),
.datab(add07),
.result(mul1)
);
mult1 mult_inst2(
.dataa(cof2),
.datab(add16),
.result(mul2)
);
mult1 mult_inst3(
.dataa(cof3),
.datab(add25),
.result(mul3)
);
mult1 mult_inst4(
.dataa(cof4),
.datab(add34),
.result(mul4)
);
//---------------------------------------------
wire [25:0] add_mul12 = {mul1[24],mul1}+{mul2[24],mul2};
wire [25:0] add_mul34 = {mul3[24],mul3}+{mul4[24],mul4};//26位
//---------------------------------------------
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
fir_out <= 27'd0;
else
fir_out <= {add_mul12[25],add_mul12}+{add_mul34[25],add_mul34};
end
endmodule
加载中...
YIKE123
3楼-- · 2019-07-15 23:40
module fir(
input clk,
input rst_n,
input [11:0] fir_in, // 12位输入
output reg [26:0] fir_out //27位输出
);
//------------------------------------------------
parameter cof1 = 12'd41;
parameter cof2 = 12'd132;
parameter cof3 = 12'd341;
parameter cof4 = 12'd510;
//------------------------------------------------
reg [11:0] fir_in_reg;
reg [12:0] shift_buf [7:0];//定义8个13位寄存器
//------------------------------------------------
wire [12:0] add07;
wire [12:0] add16;
wire [12:0] add25;
wire [12:0] add34;//对称性前后两个相加
wire [24:0] mul1;
wire [24:0] mul2;
wire [24:0] mul3;
wire [24:0] mul4;//系数相乘(12位)
//------------------------------------------------
integer i,j;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
fir_in_reg <= 12'd0;
else
fir_in_reg <= fir_in;
end
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
for(i=0;i <= 7;i=i+1)
shift_buf[i] <= 13'd0;
else
begin
for(j=0;j < 7;j=j+1)
shift_buf[j+1] <= shift_buf[j];
shift_buf[0] <= {fir_in_reg[11],fir_in_reg};
end
end
//----------------------------------------------------
assign add07 = shift_buf[0] + shift_buf[7];
assign add16 = shift_buf[1] + shift_buf[6];
assign add25 = shift_buf[2] + shift_buf[5];
assign add34 = shift_buf[3] + shift_buf[4];
//----------------------------------------------------
mult1 mult_inst1(
.dataa(cof1),
.datab(add07),
.result(mul1)
);
mult1 mult_inst2(
.dataa(cof2),
.datab(add16),
.result(mul2)
);
mult1 mult_inst3(
.dataa(cof3),
.datab(add25),
.result(mul3)
);
mult1 mult_inst4(
.dataa(cof4),
.datab(add34),
.result(mul4)
);
//---------------------------------------------
wire [25:0] add_mul12 = {mul1[24],mul1}+{mul2[24],mul2};
wire [25:0] add_mul34 = {mul3[24],mul3}+{mul4[24],mul4};//26位
//---------------------------------------------
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
fir_out <= 27'd0;
else
fir_out <= {add_mul12[25],add_mul12}+{add_mul34[25],add_mul34};
end
endmodule
加载中...
黑桃ACE
4楼-- · 2019-07-16 04:58
部分代码呢?在哪儿
加载中...
YIKE123
5楼-- · 2019-07-16 05:59
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
for(i=0;i <= 7;i=i+1)
shift_buf[i] <= 13'd0;
else
begin
for(j=0;j < 7;j=j+1)
shift_buf[j+1] <= shift_buf[j];
shift_buf[0] <= {fir_in_reg[11],fir_in_reg};
end
end
//----------------------------------------------------
assign add07 = shift_buf[0] + shift_buf[7];
assign add16 = shift_buf[1] + shift_buf[6];
assign add25 = shift_buf[2] + shift_buf[5];
assign add34 = shift_buf[3] + shift_buf[4];
//----------------------------------------------------
mult1 mult_inst1(
.dataa(cof1),
.datab(add07),
.result(mul1)
);
加载中...
YIKE123
6楼-- · 2019-07-16 07:49
精彩回答 2 元偷偷看……
加载中...
一周热门
更多
>
相关问题
如何用FPGA驱动LCD屏?
5 个回答
请教一下各位专家如何用FPGA做eDP接口?
6 个回答
FPGA CH7301c DVI(显示器数字接口)没有数字输出
7 个回答
100颗FPGA的板子,开开眼界
6 个回答
求教自制最小系统版
10 个回答
基于FPGA的X射线安检设备控制器
2 个回答
CycolneIVGX核心板,可扩展PCIE,光纤接口,大家来鉴赏一下
6 个回答
关于VHDL或Verllog程序稳定性的问题
11 个回答
相关文章
嵌入式领域,FPGA的串口通信接口设计,VHDL编程,altera平台
0个评论
Xilinx的FPGA开发工具——ISE开发流程
0个评论
基于FPGA的详细设计流程
0个评论
干货分享,FPGA硬件系统的设计技巧
0个评论
一种通过FPGA对AD9558时钟管理芯片进行配置的方法
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
FPGA
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
input clk,
input rst_n,
input [11:0] fir_in, // 12位输入
output reg [26:0] fir_out //27位输出
);
//------------------------------------------------
parameter cof1 = 12'd41;
parameter cof2 = 12'd132;
parameter cof3 = 12'd341;
parameter cof4 = 12'd510;
//------------------------------------------------
reg [11:0] fir_in_reg;
reg [12:0] shift_buf [7:0];//定义8个13位寄存器
//------------------------------------------------
wire [12:0] add07;
wire [12:0] add16;
wire [12:0] add25;
wire [12:0] add34;//对称性前后两个相加
wire [24:0] mul1;
wire [24:0] mul2;
wire [24:0] mul3;
wire [24:0] mul4;//系数相乘(12位)
//------------------------------------------------
integer i,j;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
fir_in_reg <= 12'd0;
else
fir_in_reg <= fir_in;
end
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
for(i=0;i <= 7;i=i+1)
shift_buf[i] <= 13'd0;
else
begin
for(j=0;j < 7;j=j+1)
shift_buf[j+1] <= shift_buf[j];
shift_buf[0] <= {fir_in_reg[11],fir_in_reg};
end
end
//----------------------------------------------------
assign add07 = shift_buf[0] + shift_buf[7];
assign add16 = shift_buf[1] + shift_buf[6];
assign add25 = shift_buf[2] + shift_buf[5];
assign add34 = shift_buf[3] + shift_buf[4];
//----------------------------------------------------
mult1 mult_inst1(
.dataa(cof1),
.datab(add07),
.result(mul1)
);
mult1 mult_inst2(
.dataa(cof2),
.datab(add16),
.result(mul2)
);
mult1 mult_inst3(
.dataa(cof3),
.datab(add25),
.result(mul3)
);
mult1 mult_inst4(
.dataa(cof4),
.datab(add34),
.result(mul4)
);
//---------------------------------------------
wire [25:0] add_mul12 = {mul1[24],mul1}+{mul2[24],mul2};
wire [25:0] add_mul34 = {mul3[24],mul3}+{mul4[24],mul4};//26位
//---------------------------------------------
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
fir_out <= 27'd0;
else
fir_out <= {add_mul12[25],add_mul12}+{add_mul34[25],add_mul34};
end
endmodule
input clk,
input rst_n,
input [11:0] fir_in, // 12位输入
output reg [26:0] fir_out //27位输出
);
//------------------------------------------------
parameter cof1 = 12'd41;
parameter cof2 = 12'd132;
parameter cof3 = 12'd341;
parameter cof4 = 12'd510;
//------------------------------------------------
reg [11:0] fir_in_reg;
reg [12:0] shift_buf [7:0];//定义8个13位寄存器
//------------------------------------------------
wire [12:0] add07;
wire [12:0] add16;
wire [12:0] add25;
wire [12:0] add34;//对称性前后两个相加
wire [24:0] mul1;
wire [24:0] mul2;
wire [24:0] mul3;
wire [24:0] mul4;//系数相乘(12位)
//------------------------------------------------
integer i,j;
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
fir_in_reg <= 12'd0;
else
fir_in_reg <= fir_in;
end
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
for(i=0;i <= 7;i=i+1)
shift_buf[i] <= 13'd0;
else
begin
for(j=0;j < 7;j=j+1)
shift_buf[j+1] <= shift_buf[j];
shift_buf[0] <= {fir_in_reg[11],fir_in_reg};
end
end
//----------------------------------------------------
assign add07 = shift_buf[0] + shift_buf[7];
assign add16 = shift_buf[1] + shift_buf[6];
assign add25 = shift_buf[2] + shift_buf[5];
assign add34 = shift_buf[3] + shift_buf[4];
//----------------------------------------------------
mult1 mult_inst1(
.dataa(cof1),
.datab(add07),
.result(mul1)
);
mult1 mult_inst2(
.dataa(cof2),
.datab(add16),
.result(mul2)
);
mult1 mult_inst3(
.dataa(cof3),
.datab(add25),
.result(mul3)
);
mult1 mult_inst4(
.dataa(cof4),
.datab(add34),
.result(mul4)
);
//---------------------------------------------
wire [25:0] add_mul12 = {mul1[24],mul1}+{mul2[24],mul2};
wire [25:0] add_mul34 = {mul3[24],mul3}+{mul4[24],mul4};//26位
//---------------------------------------------
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
fir_out <= 27'd0;
else
fir_out <= {add_mul12[25],add_mul12}+{add_mul34[25],add_mul34};
end
endmodule
begin
if(!rst_n)
for(i=0;i <= 7;i=i+1)
shift_buf[i] <= 13'd0;
else
begin
for(j=0;j < 7;j=j+1)
shift_buf[j+1] <= shift_buf[j];
shift_buf[0] <= {fir_in_reg[11],fir_in_reg};
end
end
//----------------------------------------------------
assign add07 = shift_buf[0] + shift_buf[7];
assign add16 = shift_buf[1] + shift_buf[6];
assign add25 = shift_buf[2] + shift_buf[5];
assign add34 = shift_buf[3] + shift_buf[4];
//----------------------------------------------------
mult1 mult_inst1(
.dataa(cof1),
.datab(add07),
.result(mul1)
);
一周热门 更多>