专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
FPGA
新人求教。Modelsim仿真时总是显示 no data,急求
2019-07-15 20:48
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
FPGA
2671
2
1264
编写了
仿真
文件,一直无结果,求大神解决。
源代码1
源代码2
源代码3
仿真文件
仿真结果
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
阿森纳电脑
1楼-- · 2019-07-16 00:52
按键消抖 源代码:
module A4_Key2
(
//输入端口
CLK_50M,RST_N,KEY,
//输出端口
LED
);
//---------------------------------------------------------------------------
//-- 外部端口声明
//---------------------------------------------------------------------------
input CLK_50M; //时钟的端口,开发板用的50MHz晶振
input RST_N; //复位的端口,低电平复位
input [ 7:0] KEY; //对应开发板上的KEY
output [ 7:0] LED; //对应开发板上的LED
//---------------------------------------------------------------------------
//-- 内部端口声明
//---------------------------------------------------------------------------
reg [19:0] time_cnt; //用来计数按键延迟的定时计数器
reg [19:0] time_cnt_n; //time_cnt的下一个状态
reg [ 7:0] key_reg; //用来接收按键信号的寄存器
reg [ 7:0] key_reg_n; //key_reg的下一个状态
wire [ 7:0] key_out; //消抖完成输出按键
reg [ 7:0] LED; //对应开发板上的LED
reg [ 7:0] LED_N; //LED的下一个状态
//设置定时器的时间为20ms,计算方法为 (20*10^6)ns / (1/50)ns 50MHz为开发板晶振
parameter SET_TIME_20MS = 27'd1_000;
//---------------------------------------------------------------------------
//-- 逻辑功能实现
//---------------------------------------------------------------------------
//时序电路,用来给time_cnt寄存器赋值
always @ (posedge CLK_50M, negedge RST_N)
begin
if(!RST_N) //判断复位
time_cnt <= 20'h0; //初始化time_cnt值
else
time_cnt <= time_cnt_n; //用来给time_cnt赋值
end
//组合电路,实现20ms的定时计数器
always @ (*)
begin
if(time_cnt == SET_TIME_20MS) //判断20ms时间
time_cnt_n = 20'h0; //如果到达20ms,定时计数器将会被清零
else
time_cnt_n <= time_cnt + 1'b1;//如果未到20ms,定时计数器将会继续累加
end
//时序电路,用来key_reg寄存器赋值
always @ (posedge CLK_50M, negedge RST_N)
begin
if(!RST_N) //判断复位
key_reg <= 8'h0; //初始化key_reg值
else
key_reg <= key_reg_n; //用来给key_reg赋值
end
//组合电路,每20ms接收一次按键的值
always @ (*)
begin
if(time_cnt == SET_TIME_20MS) //判断20ms时间
key_reg_n <= KEY; //如果到达20ms,接收一次按键的值
else
key_reg_n <= key_reg; //如果未到20ms,保持原状态不变
end
assign key_out = key_reg & (~key_reg_n);//判断按键有没有按下并点亮相应的LED
//时序电路,用来LED寄存器赋值
always @ (posedge CLK_50M, negedge RST_N)
begin
if(!RST_N) //判断复位
LED <= 8'h0; //初始化LED值
else
LED <= LED_N; //用来给LED赋值
end
//组合电路,根据按键的值点亮相应的LED
always @ (*)
begin
case(key_out)
8'h01 : LED_N = 8'b00000001; //按键1熄灭LED1
8'h02 : LED_N = 8'b00000010; //按键2熄灭LED2
8'h04 : LED_N = 8'b00000100; //按键3熄灭LED3
8'h08 : LED_N = 8'b00001000; //按键4熄灭LED4
8'h10 : LED_N = 8'b00010000; //按键5熄灭LED5
8'h20 : LED_N = 8'b00100000; //按键6熄灭LED6
8'h40 : LED_N = 8'b01000000; //按键7熄灭LED7
8'h80 : LED_N = 8'b10000000; //按键8熄灭LED8
default: LED_N = LED;
endcase
end
endmodule
加载中...
阿森纳电脑
2楼-- · 2019-07-16 02:41
test bench
`timescale 1 ps/ 1 ps
module A4_Key2_vlg_tst();
// constants
// general purpose registers
reg eachvec;
// test vector input registers
reg CLK_50M;
reg [7:0] KEY;
reg RST_N;
// wires
wire [7:0] LED;
// assign statements (if any)
A4_Key2 i1 (
// port map - connection between master ports and signals/registers
.CLK_50M(CLK_50M),
.KEY(KEY),
.LED(LED),
.RST_N(RST_N)
);
initial
begin
#0 CLK_50M = 1'b0;
#10000 RST_N = 1'b0;
#10000 RST_N = 1'b1;
end
always
// optional sensitivity list
// @(event1 or event2 or .... eventn)
begin
#10000 CLK_50M=~CLK_50M;
end
endmodule
加载中...
一周热门
更多
>
相关问题
如何用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
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
module A4_Key2
(
//输入端口
CLK_50M,RST_N,KEY,
//输出端口
LED
);
//---------------------------------------------------------------------------
//-- 外部端口声明
//---------------------------------------------------------------------------
input CLK_50M; //时钟的端口,开发板用的50MHz晶振
input RST_N; //复位的端口,低电平复位
input [ 7:0] KEY; //对应开发板上的KEY
output [ 7:0] LED; //对应开发板上的LED
//---------------------------------------------------------------------------
//-- 内部端口声明
//---------------------------------------------------------------------------
reg [19:0] time_cnt; //用来计数按键延迟的定时计数器
reg [19:0] time_cnt_n; //time_cnt的下一个状态
reg [ 7:0] key_reg; //用来接收按键信号的寄存器
reg [ 7:0] key_reg_n; //key_reg的下一个状态
wire [ 7:0] key_out; //消抖完成输出按键
reg [ 7:0] LED; //对应开发板上的LED
reg [ 7:0] LED_N; //LED的下一个状态
//设置定时器的时间为20ms,计算方法为 (20*10^6)ns / (1/50)ns 50MHz为开发板晶振
parameter SET_TIME_20MS = 27'd1_000;
//---------------------------------------------------------------------------
//-- 逻辑功能实现
//---------------------------------------------------------------------------
//时序电路,用来给time_cnt寄存器赋值
always @ (posedge CLK_50M, negedge RST_N)
begin
if(!RST_N) //判断复位
time_cnt <= 20'h0; //初始化time_cnt值
else
time_cnt <= time_cnt_n; //用来给time_cnt赋值
end
//组合电路,实现20ms的定时计数器
always @ (*)
begin
if(time_cnt == SET_TIME_20MS) //判断20ms时间
time_cnt_n = 20'h0; //如果到达20ms,定时计数器将会被清零
else
time_cnt_n <= time_cnt + 1'b1;//如果未到20ms,定时计数器将会继续累加
end
//时序电路,用来key_reg寄存器赋值
always @ (posedge CLK_50M, negedge RST_N)
begin
if(!RST_N) //判断复位
key_reg <= 8'h0; //初始化key_reg值
else
key_reg <= key_reg_n; //用来给key_reg赋值
end
//组合电路,每20ms接收一次按键的值
always @ (*)
begin
if(time_cnt == SET_TIME_20MS) //判断20ms时间
key_reg_n <= KEY; //如果到达20ms,接收一次按键的值
else
key_reg_n <= key_reg; //如果未到20ms,保持原状态不变
end
assign key_out = key_reg & (~key_reg_n);//判断按键有没有按下并点亮相应的LED
//时序电路,用来LED寄存器赋值
always @ (posedge CLK_50M, negedge RST_N)
begin
if(!RST_N) //判断复位
LED <= 8'h0; //初始化LED值
else
LED <= LED_N; //用来给LED赋值
end
//组合电路,根据按键的值点亮相应的LED
always @ (*)
begin
case(key_out)
8'h01 : LED_N = 8'b00000001; //按键1熄灭LED1
8'h02 : LED_N = 8'b00000010; //按键2熄灭LED2
8'h04 : LED_N = 8'b00000100; //按键3熄灭LED3
8'h08 : LED_N = 8'b00001000; //按键4熄灭LED4
8'h10 : LED_N = 8'b00010000; //按键5熄灭LED5
8'h20 : LED_N = 8'b00100000; //按键6熄灭LED6
8'h40 : LED_N = 8'b01000000; //按键7熄灭LED7
8'h80 : LED_N = 8'b10000000; //按键8熄灭LED8
default: LED_N = LED;
endcase
end
endmodule
`timescale 1 ps/ 1 ps
module A4_Key2_vlg_tst();
// constants
// general purpose registers
reg eachvec;
// test vector input registers
reg CLK_50M;
reg [7:0] KEY;
reg RST_N;
// wires
wire [7:0] LED;
// assign statements (if any)
A4_Key2 i1 (
// port map - connection between master ports and signals/registers
.CLK_50M(CLK_50M),
.KEY(KEY),
.LED(LED),
.RST_N(RST_N)
);
initial
begin
#0 CLK_50M = 1'b0;
#10000 RST_N = 1'b0;
#10000 RST_N = 1'b1;
end
always
// optional sensitivity list
// @(event1 or event2 or .... eventn)
begin
#10000 CLK_50M=~CLK_50M;
end
endmodule
一周热门 更多>