专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
FPGA
verilog状态机问题
2019-07-15 21:21
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
FPGA
18286
15
1530
波形
仿真
时verilog 写的状态机被综合掉,编译没有错误,状态转移也没错,什么原因可能导致这种问题呢。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
15条回答
szldsj
2019-07-16 02:58
amaj136 发表于 2017-10-5 12:34
代码贴上来看看
module fft_control(clk,rst,/*re_fifo,*/wr_fifo,rst_fifo,w_cycle,wr_full1,wr_full2,wr_fifo1,wr_fifo2,fftpts_in,sink_eop,sink_sop,sink_valid,start_16,fft16_over,switch,re_im,out_reim,count_in,recycle,re1,re2);
input clk,rst;
input wr_fifo,wr_full1,start_16,fft16_over,wr_full2;
input [47:0] re_im;
output [10:0] fftpts_in;
output /*re_fifo,*/sink_eop,sink_sop,sink_valid;
output rst_fifo,re1,re2;
output w_cycle,switch,wr_fifo1,wr_fifo2;
output [13:0] count_in;
output [47:0] out_reim;
output[4:0] recycle;
wire [47:0] out_reim;
reg pd;
reg w_cycle;
reg re_fifo;
reg rst_fifo;
reg [3:0] state1;
reg [4:0] recycle; //修改,加入周期计数,积累16周期
reg [4:0] cnt;//存储计数
reg [10:0] fftpts_in;
reg [13:0] count_in;
reg sink_eop,sink_sop;
reg sink_valid;
reg flag;
assign out_reim=flag? re_im:48'd0;
assign re1=pd? re_fifo:1'b0;
assign re2=pd? 1'b0:re_fifo;
assign wr_fifo2=pd? wr_fifo:1'b0;
assign wr_fifo1=pd? 1'b0:wr_fifo;
always @(posedge clk)
if(!rst) begin
re_fifo<=1'b0;
state1<=4'b0000;
rst_fifo<=1'b1;
w_cycle<=1'b0;
recycle<=5'd0;//周期计数
fftpts_in<=11'd1024;
sink_eop<=1'b0;
sink_sop<=1'b0;
sink_valid<=1'b0;
count_in<=12'd0;
flag<=1'b1;
pd<=1'b0;
cnt<=5'd0;
end
else
case(state1)
4'b0000: begin
rst_fifo<=1'b0; //1024点FFT变换阶段
flag<=1'b1; //16 dian bianhuan qiehuan biaozhiwei
count_in<=14'd0; //jisu
re_fifo<=1'b0; //ad shuju duqu fifo shineng
w_cycle<=1'b0;
//zhouqi biaozhiwei
recycle<=5'd0;//周期计数
sink_eop<=1'b0; //FFT shuju shuru qishibiaozhi
sink_sop<=1'b0; //FFT shuru jieshu biaozhi
sink_valid<=1'b0; //shuju shuruyouxiao biaozhiwei
fftpts_in<=11'd1024; //fft shuruchangdu
if(((wr_full1||wr_full2)==1'b1)&&(wr_fifo==1'b0)) begin //dang fifo duman 2048 wr_full==1'b1,qie wr_fifo==1'b0;
if(cnt<=5'd16) begin
state1<=4'b0001; //zhuanru xia yige zhuangtai
re_fifo<=1'b1; //dushineng
count_in<=10'd0;
cnt<=5'd0;
end
else begin
state1<=4'b0001; //zhuanru xia yige zhuangtai
re_fifo<=1'b1; //dushineng
count_in<=10'd0;
cnt<=cnt+1'b1;
pd<=~pd;
end
end
else begin
state1<=4'b0000;
end
end
4'b0001: begin
sink_valid<=1'b1; //数据输入有效标志
sink_sop<=1'b1; //输入数据流起始标志
sink_eop<=1'b0; //输入数据流结束标志
state1<=4'b0010; //转入下一状态,数据开始输入
count_in<=count_in+1'b1; //开始计第一点数据
end
4'b0010: begin
if(count_in==14'd2047) begin //1024dianFFT
if(recycle==5'd15) // 增加周期判断
begin
sink_eop<=1'b1; //shujukuai jieshu biaozhi
count_in<=14'd0;
w_cycle<=1'b1;
state1<=4'b0011; //zhuanru 16dian bianhuan
end
else
begin
recycle=recycle+1;
sink_eop<=1'b1;
count_in<=10'd0;
w_cycle<=1'b1;
state1<=4'b0000;
end
end
else
if(count_in==14'd1023) begin //shang shaopin
sink_eop<=1'b1; //shangshaopin shuju shuru jieshu
state1<=4'b0001; //fanhui shang yi ge zhuangtai wanchengxiashaopinshuju shuru
count_in<=count_in+1'b1;
end
else
count_in<=count_in+1'b1;
sink_sop<=1'b0;
end
//16dian FFT bianhuan jieduan
4'b0011: begin
re_fifo<=1'b0;
fftpts_in<=11'd16; //停止从fifo中读取数据
sink_eop<=1'b0; //shuju jiesubiaozhi zhi 0
sink_valid<=1'b0;
w_cycle<=1'b0;
count_in<=10'd0;
if(start_16) state1<=4'b0100; //16点变换开始
end
4'b0100: begin
sink_valid<=1'b1; //16dianbianhuan shujushuruzhunbeijieduan
sink_sop<=1'b1;
sink_eop<=1'b0;
state1<=4'b0101;
end
4'b0101: begin
if(count_in==14'd15) begin //16dianshuju shifou shuruwanbi
sink_eop<=1'b1;
count_in<=12'd0;
if(fft16_over) //16zhouqi shuju chuliwanbi
state1<=4'b0000; //chongxinkaishixiayilunshuju shuru
else
state1<=4'b0110; //ruguomeijieshu jixuxiayige16dianbianhuan
end
else begin
count_in<=count_in+1'b1;
flag<=1'b1; //biaozhiwei zhi wei 1
end
sink_sop<=1'b0;
end
4'b0110: begin
sink_eop<=1'b0;
sink_sop<=1'b1;
//sink_valid<=1'b0;
state1<=4'b0101;
flag<=1'b1;
end
default: state1<=state1;
endcase
reg switch;
always @(posedge clk)
if(!rst)
switch<=1'b1;
else
case(fftpts_in)
11'd512: switch<=1'b1;
11'd16: switch<=1'b0;
default: switch<=switch;
endcase
endmodule
//先输入单个周期的1024点个数据然后进行周期计算,即录入16个单周期采样数据,设置快速傅里叶变换标志,即进行16点快速变换,或1024点快速变换
加载中...
查看其它15个回答
一周热门
更多
>
相关问题
如何用FPGA驱动LCD屏?
5 个回答
请教一下各位专家如何用FPGA做eDP接口?
6 个回答
FPGA CH7301c DVI(显示器数字接口)没有数字输出
7 个回答
100颗FPGA的板子,开开眼界
6 个回答
求教自制最小系统版
10 个回答
相关文章
嵌入式领域,FPGA的串口通信接口设计,VHDL编程,altera平台
0个评论
Xilinx的FPGA开发工具——ISE开发流程
0个评论
基于FPGA的详细设计流程
0个评论
干货分享,FPGA硬件系统的设计技巧
0个评论
一种通过FPGA对AD9558时钟管理芯片进行配置的方法
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
FPGA
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
module fft_control(clk,rst,/*re_fifo,*/wr_fifo,rst_fifo,w_cycle,wr_full1,wr_full2,wr_fifo1,wr_fifo2,fftpts_in,sink_eop,sink_sop,sink_valid,start_16,fft16_over,switch,re_im,out_reim,count_in,recycle,re1,re2);
input clk,rst;
input wr_fifo,wr_full1,start_16,fft16_over,wr_full2;
input [47:0] re_im;
output [10:0] fftpts_in;
output /*re_fifo,*/sink_eop,sink_sop,sink_valid;
output rst_fifo,re1,re2;
output w_cycle,switch,wr_fifo1,wr_fifo2;
output [13:0] count_in;
output [47:0] out_reim;
output[4:0] recycle;
wire [47:0] out_reim;
reg pd;
reg w_cycle;
reg re_fifo;
reg rst_fifo;
reg [3:0] state1;
reg [4:0] recycle; //修改,加入周期计数,积累16周期
reg [4:0] cnt;//存储计数
reg [10:0] fftpts_in;
reg [13:0] count_in;
reg sink_eop,sink_sop;
reg sink_valid;
reg flag;
assign out_reim=flag? re_im:48'd0;
assign re1=pd? re_fifo:1'b0;
assign re2=pd? 1'b0:re_fifo;
assign wr_fifo2=pd? wr_fifo:1'b0;
assign wr_fifo1=pd? 1'b0:wr_fifo;
always @(posedge clk)
if(!rst) begin
re_fifo<=1'b0;
state1<=4'b0000;
rst_fifo<=1'b1;
w_cycle<=1'b0;
recycle<=5'd0;//周期计数
fftpts_in<=11'd1024;
sink_eop<=1'b0;
sink_sop<=1'b0;
sink_valid<=1'b0;
count_in<=12'd0;
flag<=1'b1;
pd<=1'b0;
cnt<=5'd0;
end
else
case(state1)
4'b0000: begin
rst_fifo<=1'b0; //1024点FFT变换阶段
flag<=1'b1; //16 dian bianhuan qiehuan biaozhiwei
count_in<=14'd0; //jisu
re_fifo<=1'b0; //ad shuju duqu fifo shineng
w_cycle<=1'b0;
//zhouqi biaozhiwei
recycle<=5'd0;//周期计数
sink_eop<=1'b0; //FFT shuju shuru qishibiaozhi
sink_sop<=1'b0; //FFT shuru jieshu biaozhi
sink_valid<=1'b0; //shuju shuruyouxiao biaozhiwei
fftpts_in<=11'd1024; //fft shuruchangdu
if(((wr_full1||wr_full2)==1'b1)&&(wr_fifo==1'b0)) begin //dang fifo duman 2048 wr_full==1'b1,qie wr_fifo==1'b0;
if(cnt<=5'd16) begin
state1<=4'b0001; //zhuanru xia yige zhuangtai
re_fifo<=1'b1; //dushineng
count_in<=10'd0;
cnt<=5'd0;
end
else begin
state1<=4'b0001; //zhuanru xia yige zhuangtai
re_fifo<=1'b1; //dushineng
count_in<=10'd0;
cnt<=cnt+1'b1;
pd<=~pd;
end
end
else begin
state1<=4'b0000;
end
end
4'b0001: begin
sink_valid<=1'b1; //数据输入有效标志
sink_sop<=1'b1; //输入数据流起始标志
sink_eop<=1'b0; //输入数据流结束标志
state1<=4'b0010; //转入下一状态,数据开始输入
count_in<=count_in+1'b1; //开始计第一点数据
end
4'b0010: begin
if(count_in==14'd2047) begin //1024dianFFT
if(recycle==5'd15) // 增加周期判断
begin
sink_eop<=1'b1; //shujukuai jieshu biaozhi
count_in<=14'd0;
w_cycle<=1'b1;
state1<=4'b0011; //zhuanru 16dian bianhuan
end
else
begin
recycle=recycle+1;
sink_eop<=1'b1;
count_in<=10'd0;
w_cycle<=1'b1;
state1<=4'b0000;
end
end
else
if(count_in==14'd1023) begin //shang shaopin
sink_eop<=1'b1; //shangshaopin shuju shuru jieshu
state1<=4'b0001; //fanhui shang yi ge zhuangtai wanchengxiashaopinshuju shuru
count_in<=count_in+1'b1;
end
else
count_in<=count_in+1'b1;
sink_sop<=1'b0;
end
//16dian FFT bianhuan jieduan
4'b0011: begin
re_fifo<=1'b0;
fftpts_in<=11'd16; //停止从fifo中读取数据
sink_eop<=1'b0; //shuju jiesubiaozhi zhi 0
sink_valid<=1'b0;
w_cycle<=1'b0;
count_in<=10'd0;
if(start_16) state1<=4'b0100; //16点变换开始
end
4'b0100: begin
sink_valid<=1'b1; //16dianbianhuan shujushuruzhunbeijieduan
sink_sop<=1'b1;
sink_eop<=1'b0;
state1<=4'b0101;
end
4'b0101: begin
if(count_in==14'd15) begin //16dianshuju shifou shuruwanbi
sink_eop<=1'b1;
count_in<=12'd0;
if(fft16_over) //16zhouqi shuju chuliwanbi
state1<=4'b0000; //chongxinkaishixiayilunshuju shuru
else
state1<=4'b0110; //ruguomeijieshu jixuxiayige16dianbianhuan
end
else begin
count_in<=count_in+1'b1;
flag<=1'b1; //biaozhiwei zhi wei 1
end
sink_sop<=1'b0;
end
4'b0110: begin
sink_eop<=1'b0;
sink_sop<=1'b1;
//sink_valid<=1'b0;
state1<=4'b0101;
flag<=1'b1;
end
default: state1<=state1;
endcase
reg switch;
always @(posedge clk)
if(!rst)
switch<=1'b1;
else
case(fftpts_in)
11'd512: switch<=1'b1;
11'd16: switch<=1'b0;
default: switch<=switch;
endcase
endmodule
//先输入单个周期的1024点个数据然后进行周期计算,即录入16个单周期采样数据,设置快速傅里叶变换标志,即进行16点快速变换,或1024点快速变换
一周热门 更多>