![](https://img-blog.csdnimg.cn/20190918140213434.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
FPGA_Cyclone IV
文章平均质量分 57
Cyclone IV学习
一只活蹦乱跳的大鲤鱼
这个作者很懒,什么都没留下…
展开
-
VHDL实现 4-16编码器
4_16译码器一、编程设计RTL文件(.vhdl):将使用if和case的两种方式分别用两个architecture,使用configration选择library ieee;use ieee.std_logic_1164.all;entity decoder4_16 is port( a,b,c,d:in std_logic; -- q:out integer range 0 to 15); q:out std_logic_vect原创 2022-04-27 14:26:30 · 5689 阅读 · 0 评论 -
Modelsim中信号波形自动分组
如果所有信号叠加在一起,不知道归属于哪个模块,可以依次使用“ctrl + a” -> “ctrl + g” 快捷键来对归属于各个模块的信号进行快速分组。原创 2022-03-17 14:07:36 · 3140 阅读 · 0 评论 -
Verilog实现4位按键分别控制蜂鸣器发出不同音阶(未完成,请指导)
实验任务:使用板载4位独立按键,进行4位按键消抖检测,当没有按键按下时不响,按下则发出声响,分别为 DO RE MI FA。实验思路还是有两个part,一个part用来检测按键是否按下,输入key_in,输出key_out,为第几位。第二个part用来运行蜂鸣器,根据按键值case,未按下的,不响,按下就DO RE MI FA四个输出。4位按键消抖一位按键的消抖很简单,就是设置一个20ms的计数器,检测按键只要为高电平就清零,如果低电平计数,如果能计数到20ms并且按键为低电平,就保持同时在CN原创 2022-03-13 18:09:31 · 3066 阅读 · 2 评论 -
Verilog实现4位按键消抖,分别控制一个LED
Verilog实现4位按键消抖,分别控制一个LED代码思路(完整代码在后)完整代码参考:(主要是第一篇,第二篇不严谨)《按键消抖与LED控制》实验的个人思考与总结 Verilog实现的多个按键消抖(具体模块可用)代码思路(完整代码在后)之前的一篇博文中,FPGA触摸按键控制LED——拓展:按下之后LED闪烁,再次按下停止闪烁介绍了使用下降沿来判断按键按下并做出反应的方式,那么这次有4个按键,其实同样可以使用这种方法进行采样。但是,这种方法有一个缺点,如果采样的时候有抖动,就会发生误判,只能寄希原创 2022-03-13 16:42:03 · 3309 阅读 · 0 评论 -
解决在vscode中react标签代码不提示的问题:
解决在vscode中react标签代码不提示的问题:转载 2022-03-08 07:48:54 · 2072 阅读 · 0 评论 -
Verilog实现4位流水PWM呼吸灯
Verilog实现4位流水呼吸灯基本思路Verilog代码代码思路解析1.呼吸灯2.流水灯的切换——拼接符{}的思路debug3.流水灯的切换——led_ctrl的条件debugTestbench仿真图在完成呼吸灯的基础上,尝试流水呼吸灯。基本思路首先流水灯部分代码基本上可以继续用,基本思路还是两个并行的部分,PWM呼吸灯的效果使用led变量赋值,一直运行;而流水部分,通过一个流水灯代码不停地移位,选择亮的那位,将led的值利用拼接符拼接即可。关于流水灯部分的思路,是受了自己一年前用spartan6原创 2022-03-06 23:02:03 · 4689 阅读 · 2 评论 -
Verilog 状态机的编码方式
独热码首先独热码因为每个状态只有 1bit 是不同的,所以在执行到 55 行时的(state == TWO)这条语句时,综合器会识别出这是一个比较器,而因为只有 1 比特为 1,所以综合器会进行智能优化为(state[2] == 1’b1),这就相当于把之前 3 比特的比较器变为了 1 比特的比较器, 大大节省了组合逻辑资源,但是付出的代价就是状态变量的位宽需要的比较多,而我们 FPGA 中组合逻辑资源相对较少,所以比较宝贵,而寄存器资源较多,所以很完美。二进制编码情况和独热码刚好相反,他因为使用了较转载 2022-03-06 15:37:24 · 406 阅读 · 0 评论 -
FPAG——实现双向流水灯的两种方法(含有一个失败方法)
目录设置一个方向位testbench失败方法:灵活使用{}拼接符,大大简化编程设置一个方向位判断方向时可以直接使用led_reg的最低位和最高位。//方法1:设置标志位module water_led_double#( parameter CNT_MAX = 25'd24_999_999)( input wire sys_clk , input wire sys_rst_n , output wire [3:0] led_out原创 2022-03-05 21:40:47 · 2026 阅读 · 3 评论 -
Modelsim联和仿真时tb文件出错之后,修改完简便操作继续运行,无需重启
Quartus II 使用 modelsim 仿真联和仿真的时候,如果tb文件有错,比如这里少了个分号,那work 下面直接没有tb文件,我改完之后只能关掉modelsim重新联和仿真,这样就太慢了,有什么其他快捷方法吗?答:在transcript里面按键盘↑键选择运行指令(一般都能编译成功), 如果不能再退出modelsim再运行。(解释看文章最开始给出的连接引用文章)...原创 2022-03-05 20:33:51 · 1368 阅读 · 0 评论 -
FPGA触摸按键控制LED——拓展:按下之后LED闪烁,再次按下停止闪烁
实现触摸按键触摸后 led 灯闪烁,再次触摸时 led 灯停止闪烁。基本思路是:两个part并行嘛,一个part实现LED闪烁的部分,一直运行,另一个part检测按键按下的下降沿;由更高一级的touch_en控制LED这一级。注意touch_en只是一个脉冲信号,所以不能用作条件赋值语句的条件,而是需要重新设置一个touch_flag变量,作为电平信号,方可使用。代码如下,亲测可行,未写testbench。//实现触摸按键触摸后 led 灯闪烁,再次触摸时 led 灯停止闪烁。//基本思路是,原创 2022-03-05 17:32:49 · 2351 阅读 · 1 评论 -
FPGA触摸按键控制LED——边沿检测——同步时钟的意识
边沿检测——同步时钟的意识边沿检测上升沿检测核心代码:下降沿检测核心代码:代码编写——时钟同步的思想疑问边沿检测想要实现按一次LED翻转状态,而不是按下亮,打开灭,就需要检测边沿。我们对同一信号打一拍后在①位置处就可以检测到上升沿,使之拉高一个时钟的脉冲;在②位置处可以检测到下降沿,使之拉高一个时钟的脉冲。上升沿检测核心代码:在①处检测到 data 为高电平且 data_reg 为低电平时,表示有上升沿产生。方法一:与逻辑实现 always@(posedge sys_clk or neged原创 2022-03-05 16:22:45 · 825 阅读 · 0 评论 -
Verilog任意分频器设计
// parameter 参数化的方法将偶数分频和奇数分频都做成通用的任意分频模块,方便以后的调用module divider_api#( parameter CLK_DIV = 12'd5, // 分频数 CNT_WIDTH = 12'd5 // 分频器位宽)( input wire sys_clk , //系统时钟50Mhz input wire sys_rst_n , //全局复位 output wire .转载 2022-03-03 21:31:07 · 3041 阅读 · 0 评论 -
FPGA——LED灯闪烁10次
LED灯闪烁10次基本框架是基于用Verilog编写的定时器,每0.5s计数满,cnt_flag置位,LED翻转一次,那么如果要求只闪烁10次,就需要一个计数变量count,这里采用的方法是,每次cnt_flag置位的时候,都让count加一,因为需要闪烁10次,也就是有10个LED周期,那么就需要翻转20次,所以需要一个5位的计数count。module flash_ten#( parameter CNT_MAX = 25'd24_999_999)( input wire sys_clk原创 2022-03-03 09:27:33 · 3195 阅读 · 4 评论 -
Modelsim仿真出现蓝线(Hiz高阻态)以及红线(x不定态)
Modelsim仿真出现蓝线(Hiz高阻态)以及红线(x不定态)原代码//方法 1 实现:仅实现分频功能module divider_six( input wire sys_clk , input wire sys_rst_n , output reg clk_out );reg [1:0] cnt;//cnt:计数器从 0 到 2 循环计数always@(posedge sys_clk or negedge原创 2022-03-01 22:00:32 · 7140 阅读 · 6 评论 -
如果把计数器的计数条件和清零条件的优先级互换会有什么不一样的效果?
这么样,直接编译不成功。。。。。。。。。。。报错:Error (10200): Verilog HDL Conditional Statement error at counter.v(66): cannot match operand(s) in the condition to the corresponding edges in the enclosing event control of the always constructFPGA 关于错误(10200)...原创 2022-03-01 20:40:10 · 317 阅读 · 5 评论 -
阻塞赋值与非阻塞赋值&&延一拍
D触发器时序逻辑电路的延一拍同步D触发器“同步”是和工作时钟同步的意思,当时钟的上升沿(也可以是下降沿)来到时检测到复位操作才有效,否则无效。sys_rst_n 被拉低后 led_out 没有立刻变为 0,而是当 syc_clk 的上升沿到来的时候 led_out 才复位成功,在复位释放的时候也是相同原因。异步D触发器“异步”是和工作时钟不同步的意思,寄存器的复位不关心时钟的上升沿来不来,只要有检测到按键被按下,就立刻执行复位操作。sys_rst_n 被拉低后 led_out 立刻变为0,而转载 2022-03-01 19:21:48 · 3534 阅读 · 3 评论 -
quartus II 相同的RTL代码却不能得到正确的RTL视图?
使用Verilog编写的3-8译码器代码如下:module decoder3_8( input wire in1, input wire in2, input wire in3, output reg [7:0] out);always @(*) if({in1,in2,in3} == 3'b000) out = 8'b0000_0001; else if({in1,in2,in3} == 3'b001) out = 8'b0000_0010; else if(原创 2022-02-27 21:17:42 · 2049 阅读 · 0 评论