标签:LED clk sys Prj1 key input xilinx led rstn
1.目的
本节实验目的是板上的触摸键的检测,并驱动LED灯。
2.FPGA芯片型号
XC7A35TFGG484
3.硬件设计
AR101的使用(https://www.docin.com/p-972138456.html),如下描述,当前电路连接方式为输出高电平有效、同步模式。
4.软件设计
//
//prj_top.v
//
`timescale 1ns / 1ps
module prj_top
(
input sys_clk,
input sys_rstn,
input key_tpad,
output led_out
);
wire key_en;
key_touch inst2_key_touch
(
.clk_i(sys_clk),
.rstn_i(sys_rstn),
.key_tpad(key_tpad),
.pos_key_tpad(),
.neg_key_tpad(key_en)
);
led_driver inst2_led
(
.clk_i(sys_clk),
.rstn_i(sys_rstn),
.key_in(key_en),
.led_out(led_out)
);
endmodule
//
//key_touch.v
//
//检测触摸键IC输出状态
module key_touch
(
input clk_i,
input rstn_i,
input key_tpad,
output pos_key_tpad,
output neg_key_tpad
);
reg key_tpad_d0, key_tpad_d1;
always@(posedge clk_i or negedge rstn_i)
begin
if(!rstn_i)
begin
key_tpad_d0 <= 1'b0;
key_tpad_d1 <= 1'b0;
end
else
begin
key_tpad_d0 <= key_tpad;
key_tpad_d1 <= key_tpad_d0;
end
end
assign pos_key_tpad = key_tpad_d0 & (~key_tpad_d1);
assign neg_key_tpad = (~key_tpad_d0) & key_tpad_d1;
endmodule
//
//led_driver.v
//
module led_driver
(
input clk_i,
input rstn_i,
input key_in,
output led_out
);
reg led_o;
always@(posedge clk_i or negedge rstn_i)
begin
if(!rstn_i)
led_o <= 1'b0;
else if(key_in)
led_o <= ~led_o;
else
led_o <= led_o;
end
assign led_out = led_o;
endmodule
5.仿真
`timescale 1ns / 1ps
module tb_top();
parameter T = 20;
reg key ;
reg sys_clk ;
reg sys_rstn;
wire led;
initial
begin
key =1'b0;//按键初始状态为全断开
sys_clk =1'b0; //初始时钟为低电平
sys_rstn =1'b0; //复位信号初始为低电平
#T//
sys_rstn =1'b1; //一个时钟周期后复位信号拉高
#(10000000*T) //200ms
key = 1'b1; //触摸状态
#T
key = 1'b0; //触摸状态
#(10000000*T) //200ms
key = 1'b1; //触摸状态
#T
key = 1'b0; //触摸状态
end
always # (T/2) sys_clk <= ~sys_clk;
prj_top inst_prj_top
(
.sys_clk (sys_clk),
.sys_rstn (sys_rstn),
.key_tpad (key),
.led_out (led)
);
endmodule
仿真结果:
6.应用
信号名 | 方向 | 管脚 | 端口说明 | 电平标准 |
sys_clk | input | R4 | 系统时钟,50M | LVCMOS33 |
sys_rst_n | input | U2 | 系统复位,低有效 | LVCMOS33 |
TPAD | input | T5 | 触摸键驱动芯片输出,高有效 | LVCMOS33 |
led[0] | output | R2 | LED,高点亮 | LVCMOS33 |
#------------------------------系统时钟和复位-----------------------------------
create_clock -period 20.000 -name sys_clk [get_ports sys_clk]
set_property -dict {PACKAGE_PIN R4 IOSTANDARD LVCMOS33} [get_ports sys_clk]
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets sys_clk]
set_property -dict {PACKAGE_PIN U2 IOSTANDARD LVCMOS33} [get_ports sys_rstn]
#----------------------------------触摸按键-------------------------------------
set_property -dict {PACKAGE_PIN T5 IOSTANDARD LVCMOS33} [get_ports key_tpad]
#-----------------------------------LED-----------------------------------------
set_property -dict {PACKAGE_PIN R2 IOSTANDARD LVCMOS33} [get_ports {led_out}]
标签:LED,clk,sys,Prj1,key,input,xilinx,led,rstn 来源: https://blog.csdn.net/Roy_tly/article/details/121455128
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。