![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
FPGA基础
ha丨hh
这个作者很懒,什么都没留下…
展开
-
FPGA(九)---异步信号亚稳态处理
一、基本原理1、时钟信号只在上升沿起作用,异步信号输入时会有个亚稳态(抖动)的过程。2、时钟信号采样会出现两种情况:异步信号1和异步信号2。对于异步信号1,时钟能够采样到稳定信号,没有任何影响;但是,我们不能确定每次都是刚好采样到稳定时候,例如异步信号2。3、因此要对异步信号进行处理,通常的做法是:将异步信号连接2级寄存器q和q1,进行两个周期的时延,以获得稳定信号。4、2级寄存器的输出是个稳定的值(可能是0或1)。二、对FPGA(八)中key_in进行优化。与(八)中的边沿检测,代码相同,意原创 2020-12-03 22:00:03 · 712 阅读 · 0 评论 -
FPGA(八)---按键消抖
一、按键状态按键未按下时:空闲态,FPGA的引脚通过上拉电阻置为高电平。按键按下时:FPGA的引脚接地,变为低电平。**在按键按下和释放的过程中:**会出现一段时间的抖动,可以通过示波器观察抖动时间,不超过20ms(如果是50M的晶振,就会经过多个时钟周期,前一个时钟是高电平,下一个可能就是低电平,也就是会出现抖动的现象,这是我们不想要的)IDEL:空闲态DOWN:按下状态***消抖原理:***当按键按下时,检测到下降沿进入FILTER,设置FILTER时间(信号抖动的最大时间)为20ms,原创 2020-12-03 20:46:12 · 3204 阅读 · 2 评论 -
FPGA(七)---状态机设计
一、逻辑设计二、代码module State_Hello(Clk,Rst_n,data,led); input Clk; input Rst_n; input [7:0]data; //检测字母,每个字母由8位的ASCII码表示 output reg led; localparam //之前采用parameter CHECK_H = 5'b0_0001, //这里采用的是独热码 CHECK_e = 5'b0_0010, CHECK_la =原创 2020-12-01 11:31:01 · 284 阅读 · 0 评论 -
FPGA(六)---阻塞赋值和非阻塞赋值
一、阻塞赋值module block_nonblock(Clk, Rst_n, a,b,c,out); input Clk; input Rst_n; input a,b,c; output reg [1:0]out; //out = a + b + c; //d = a + b; //out = d + c; reg [1:0]d; always@(posedge Clk or negedge Rst_n) if(!Rst_n) out = 2'b0; else原创 2020-12-01 10:14:27 · 567 阅读 · 0 评论 -
FPGA(五)---BCD计数器
一、BCD码BCD码就是将十进制中的每一个数,都用四位的二进制进行表示。例如:153 --> 0001 0101 00114562 -->0100 0101 0110 0010原创 2020-11-30 11:17:24 · 3722 阅读 · 0 评论 -
FPGA(四)---IP核实现计数器
一、调用IP核的步骤1、新建项目project2、打开Tools中的megaWizrd Plug-in Manager3、选择create a new …4、左侧直接搜索想要的功能,这里是counter,点击5、选择计数器的位数,选择是增加、减少或者是都有,我们选择up only6、Plain binary是二进制直接计数,modulus,with a count of 设置一个最大值carry-in有效的时候进行计数carry-out是产生一个输出说计数满了7、后面暂不管,n原创 2020-11-26 21:11:43 · 2359 阅读 · 0 评论 -
FPGA(三)---计数器
一、计数器设置目的:LED灯,每500ms,状态翻转一次系统时钟为50M,对应周期20ns500ms = 20ns * 25000 00025000 000 转换成16进制为17D7840由于16进制的每个数字都是由4个bit组成,即0:0000,4: 0100, 8: 1000,所以总共7个数字一共需要28个bit位表示,但首数字1: 0001,可以只用一个1位进行表示,所以一共需要25位。...原创 2020-11-24 22:07:44 · 1406 阅读 · 0 评论 -
FPGA(二)---38译码器
一、代码module decoder_38(a,b,c,out); input a,b,c; //输入端口 output reg [7:0]out; //高位在前,低位在后,共8位 always@(a,b,c)begin //敏感列表,当a,b,c中的一个发生变化就执行begin后面的语句。 case({a,b,c}) //花括号将a,b,c拼接成一个信号 3'b000:out = 8'b0000_0001; //always中的赋值必须是reg形式 3'b001原创 2020-11-24 16:39:47 · 3222 阅读 · 0 评论 -
FPGA(一)---二选一多路器及quartus基本操作
一、FPGA开发流程二、创建模块和仿真打开Quartus --》create new project --》new file,选择Verilog HDL file–》写模块module led_test(a,b,key_in,led_out);input a; //输入端口input b;input key_in;output led_out; //输出端口//当key_in ==0, led_out = aassign led_out = (key_in == 0)? a : b;原创 2020-11-23 21:56:26 · 2147 阅读 · 0 评论