![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
FPGA学习笔记及心得
FPGA学习笔记及心得
whurrican
这个作者很懒,什么都没留下…
展开
-
Verilog编写细节问题
理论上在顶层模块或testbench文件中的实例化模块是并行执行的,但实际上在程序执行的过程中会出现短暂的延迟,尤其信号恰好处于时钟上升沿的时候,波形的变化会变得很明显。所以在实现具体电路时应尽量化繁为简。可以看到的是,第一段代码出现的波形与第二三段代码出现的波形并不相同,而其基于的基础电路都是相同的。原创 2022-09-28 20:48:47 · 301 阅读 · 1 评论 -
逻辑运算总结
pos式的运算对象为logic-0可以由真值表得出也可以由sop公式得出。sop式易由卡诺图得出也是最常用的逻辑表达式对象为logic-1。借由常用公式中的式(17)和式(18)可以完成与或到或与的变化。sop和pos及卡诺图化简法。即:pos = ~sop。原创 2022-09-26 10:06:45 · 669 阅读 · 0 评论 -
FPGA实验 -- 数码管显示
多模块设计思想原创 2022-06-22 21:16:23 · 1754 阅读 · 0 评论 -
FPGA实验 -- 无源蜂鸣器
简单pwm波的产生原创 2022-06-17 09:45:55 · 496 阅读 · 0 评论 -
FPGA学习笔记 -- 状态机
同步指状态机与系统时钟同步,有限指状态是有限个状态两类状态机共同点是状态跳转只和输入有关,若输出只和状态有关与输入无关为Moore型,若输出与状态和输入均有关为Mealy型。状态机的具体理论可以参考“信息论”中的部分内容状态机工作过程:0(条件)/0(结果)可乐贩卖机系统输入:投入1元硬币输出:出可乐,不出可乐状态:投入0元,投入1元,投入2元,投入3元条件为是否投入硬币,结果为是否出可乐,显然不利用three的状态是可以完成任务的此为Mealy.....原创 2022-06-16 12:21:14 · 343 阅读 · 0 评论 -
FPGA学习笔记 -- 流水灯
设计四个led灯进行循环闪烁module water_led#(parameter CNT_MAX = 25'd24_999_999) //这个计数可延迟0.5s( input wire sys_clk, input wire res_n, output wire [3:0] led_out);reg [24:0] cnt;reg cnt_flag;reg [3:0] led_out_flag;always@(posedge sys_clk or negedge...原创 2022-04-13 20:05:53 · 653 阅读 · 0 评论 -
FPGA学习笔记 -- 按键消抖
硬件消抖:RS触发器软件消抖:模拟按键产生的高低电平毛刺,低电平有效,由于毛刺的存在,当确定按下时间时,若是每次都按照消抖的最大时间10ms考虑,在高频情况下,会浪费一定的时间,而按5ms考虑又无法保证按键已经消抖。所以这里添加一个计数器,当检测到低电平就开始计数,检测到高电平就将其清零。输出采用信号标志,当计数器计数到最大值时升高一个系统时钟周期的电平,其余时间保持低电平。module key_filter#(parameter CNT_MAX = 20'd999...原创 2022-04-06 15:53:20 · 538 阅读 · 0 评论 -
FPGA学习笔记 -- 分频器
六分频可以看到输出的频率对应六个系统时钟周期,即完成了六分频的任务,这里使计数器计数为2将输出波形进行反转,所以0,1,2半个周期就有了三个系统时钟周期。此方法在低频信号中可以使用,但是在高频时钟下会出现失误, 在FPGA中所有的时钟都要连接到全局时钟网络中去,又叫全局时钟数,其目的是为了保证时钟信号到达每一个器件的时间都尽可能相同,而这种方法并没有连接到全局时钟网络中module divider_six( input wire sys_clk, input wire r...原创 2022-03-31 17:00:35 · 1147 阅读 · 2 评论 -
FPGA学习笔记 -- 层次化设计
自下而上:由功能单元到模块到整体自上而下:由整体分解到功能模块实际中两种思想是混合使用的:案例:全加器:利用半加器实现半加器模块module half_add( input wire in_1, input wire in_2, output wire sum, output wire count); assign {count, sum} = in_1 + in_2;endmodule...原创 2022-03-09 17:12:56 · 733 阅读 · 0 评论 -
FPGA学习笔记--时序逻辑的设计
时序逻辑可以极大避免竞争冒险带来的危害时序逻辑的开始--寄存器寄存器的设计一般由D触发器组成使用按键点亮LED灯 图为同步复位和异步复位分别对应的波形图:注意异步复位是指异步复位,同步释放同步复位中若时钟上升沿刚好检测到电平的上升沿变化,这里默认检测上一个时刻电平为低电平,直到下一个时钟到来改变,即时序逻辑的延迟效果。module flip_flop( input wire clk, input wire res_...原创 2022-03-10 16:29:46 · 516 阅读 · 1 评论 -
FPGA学习笔记3 -- 多路选择器
这里设计一个三线八线译码器组合逻辑赋值的大体框架:当只有单条赋值语句时可以省略begin -- end 语句module my3_8(a,b,c,out); input a;//输入端口a input b;//输入端口b input c;//输入端口c output reg [7:0]out;//输出端口,[]中表示位宽,且在always模块中赋值的变量一定为reg型 always@(a,b,c)begin//当abc中任意一个发生变化即执行begin中...原创 2021-11-11 17:16:41 · 579 阅读 · 0 评论 -
FPGA学习笔记 -- 阻塞赋值与非阻塞赋值
阻塞赋值与非阻塞赋值所带来的差异比较巨大,所以要谨慎使用,官方推荐的写法是在组合逻辑电路中使用阻塞赋值,而在时序逻辑电路中使用非阻塞赋值module blocking( input wire clk, input wire res_n, input wire [1:0] in, output reg [1:0] out);reg in_reg;always@(posedge clk or negedge res_n) if(res_n == 1'b0) begi...原创 2022-03-10 17:31:30 · 222 阅读 · 0 评论 -
FPGA学习笔记2--点亮led
设计流程:module LED(a,b,key_in,led_out); input a;//输入端口a input b;//输入端口b input key_in;//按键输入,实现输入通道的选择 output led_out;//led控制端口 //当key_in==0,led_out==a assign led_out = (key_in == 0)? a : b; endmodule仿真文件(textbench)`timescale..原创 2021-11-11 16:24:34 · 792 阅读 · 0 评论 -
FPGA学习笔记1 -- verilog语言
基础语法 逻辑值 0:逻辑低电平 1:逻辑高电平 z:高阻态算术运算符:归约运算符和按位运算符:关系运算符:移位运算符:位拼接运算符:...原创 2021-11-09 09:49:32 · 118 阅读 · 0 评论 -
FPGA学习笔记4 -- 加法器的实现
半加器模块图及真值表module half_add( input wire in_1, input wire in_2, output wire sum, output wire count); assign {count, sum} = in_1 + in_2;endmodulertl综合电路测试文件testbench`timescale 1ns/1nsmodule half_add_tb; reg in_1;...原创 2021-11-27 21:17:18 · 565 阅读 · 0 评论