当前位置: 首页 > wzjs >正文

镇江模板网站网站如何做长尾词排名

镇江模板网站,网站如何做长尾词排名,嘉兴手机建站模板,网站忧化 优帮云【FPGA实战】Verilog实现DE2-115的流水灯控制 一、实验要求二、实现步骤2.1 环境配置2.1.1 VScode与Quartus的联动step1 下载Verilog插件step2 Quartus绑定VScode 2.2 实现思路2.2.1 LedBlink.v2.2.2 fenpin.vfenpin.v代码 2.2.1 display.v1)对于流水灯:…

【FPGA实战】Verilog实现DE2-115的流水灯控制

  • 一、实验要求
  • 二、实现步骤
    • 2.1 环境配置
      • 2.1.1 VScode与Quartus的联动
        • step1 下载Verilog插件
        • step2 Quartus绑定VScode
    • 2.2 实现思路
      • 2.2.1 LedBlink.v
      • 2.2.2 fenpin.v
        • fenpin.v代码
      • 2.2.1 display.v
        • 1)对于流水灯:
        • 2)重置按钮
        • 3)暂停键:
        • display.v代码
        • LedBlink.v代码
    • 2.3 烧录实验
      • 2.3.1 编译以及一些问题
      • 2.3.2 烧录及一些问题
      • 2.3.3 实验效果
  • 三、实验总结
  • 四、参考博客

一、实验要求

在DE2-115开发板上,用Verilog设计一个LED流水灯实验:用6个LED完成周期为1秒的跑马灯效果。

此外,最好规范化实现,采用层次化设计,分别在VScdoe编程各代码文件,如top顶层模块(比如LedBlink.v)、分频模块(fenpin.v)、显示模块(display.v);

增加流水灯的按键暂停、按键恢复功能,使得当按暂停键时流水灯暂停,再按一下继续流水灯。

1)安装VScode,在其中下载安装Verilog-HDL/SystemVerilog插件(实现Verilog代码的语法高亮/自动补全);

二、实现步骤

2.1 环境配置

工欲善其事必先利其器,在Quartus自带的文本编辑器上编写代码不太适应而且也不美观,于是我们可以引入程序员神器——VScode。

2.1.1 VScode与Quartus的联动

step1 下载Verilog插件

这里假设你已经下载了VScode,首先我们要下载Verilog插件。
在这里插入图片描述
安装扩展后,可以尝试创建新的文本文件,如下图
在这里插入图片描述
点击选择语言,搜索Verilog
在这里插入图片描述
选择第一个,之后我们写代码就很方便了~
在这里插入图片描述

step2 Quartus绑定VScode

打开Quartus,在菜单栏里找到
tools->Options->Preferred Text Editor
在这里插入图片描述
选择Custom,在下面输入

"E:\Microsoft VS Code\Code.exe" -g %f:%l

当然,引号内是你VScode的.exe的文件地址,找不到怎么办?
右键快捷键点击打开文件所在位置就能找到了!
这之后我们用Quartus操作Verilog文件都会自动弹出VScode编辑了。

(当然,这里也有个bug,比如你新建一个Verilog文件的话可能没办法命名,假如你知道怎么解决的话请在评论告诉我。)

2.2 实现思路

一开始拿到这个题目是不是没有思路?那我们就先AI!
AI给出的思路是——

要分成顶层模块分频模块显示模块顶层模块连接各个子模块,分频模块负责将系统时钟分频到合适的频率,显示模块负责控制LED的状态变化

2.2.1 LedBlink.v

因此,top顶层模块(LedBlink.v)需要实现各模块的连接;

具体代码我们先按下不表,后面再展示。

2.2.2 fenpin.v

分频模块(fenpin.v)需要将系统时钟分频到合适的频率。

晶振频率为50MHz,则一个时钟周期 T = 1 ( 50 × 1 0 6 ) = 0.02 u s T= {1 \over (50×10^6)} = 0.02us T=(50×106)1=0.02us

而我们要使得1s闪六个等就相当于 1 6 s {1\over6}s 61s闪一个灯,约166.666ms,于是,闪烁一次我们需要 166666 0.02 = 83333 {166 666\over0.02}=83333 0.02166666=83333个周期,也就是计数83,333次。

因此我们需要一个counter能够存储从0到83332的整数,也就是 2 23 − 1 2^{23}-1 2231(即8388607)。

因此,我们需要一个寄存器cnt作计数器

reg [22:0] cnt;

在复位信号rst_n的控制下可以回到初始状态,在正常工作时,计数器cnt会随着时钟信号clk不断增加,当cnt数到8333332时,会发出一个高电平的使能信号en,然后cnt重新开始计数,如此循环。这个使能信号en就可以用来控制其他模块按照这个特定的周期进行工作。

fenpin.v代码
module fenpin(input   clk,input   rst_n,output  reg en
);reg [22:0] cnt;always @(posedge clk or negedge rst_n) beginif(!rst_n)begincnt<=23'd0;en<=1'b0;end else beginif(cnt==23'd8_333_332) begincnt<=23'd0;en<=1'b1;end else begincnt<=cnt+1'b1;en<=1'b0;endend
endendmodule

2.2.1 display.v

显示模块的主要功能是实现走马灯也就是流水灯的闪烁控制,暂停键的控制逻辑以及复位键的逻辑。

1)对于流水灯:

我们可以有两种方法,一种是case语句列举六个灯的逻辑语句。

case (cnt1)3'b000 : led <= 6'b000001;3'b001 : led <= 6'b000010;3'b010 : led <= 6'b000100;3'b011 : led <= 6'b001000;3'b100 : led <= 6'b010000;3'b101 : led <= 6'b100000;default: led <= led;
endcase

第二种就是用位移实现闪烁。

	if(!rst_n) beginled <= 6'b000001;end else if(en_ls && !pause_reg) beginled <= {led[0], led[5:1]};end
2)重置按钮

在我们单片机学习过程中,对于按键我们一般是要采取消抖的,因此我们还要引入一些变量。

刚开始(复位):如果按下了 “重置按钮”(rst_n 是低电平),所有的信号都会被清空,回到初始状态。

每次秒表滴答一下(时钟上升沿),就把按键信号放到 sync_key 里,同时把 sync_key 之前的状态记录到 key_delay 里。

如果 sync_key 和 key_delay 不一样,说明按键状态变了,这时候 “消抖计数器” 就开始工作,把计数设为 999999,然后慢慢减 1;等 “消抖计数器” 减到 0 了,就看看按键是按下去了(sync_key[1] 是 0)还是松开了(sync_key[1] 是 1)。

3)暂停键:

要实现暂停,我们可以加入 key_pressed 用于记录按键状态看是否按下。
按键从按下状态变为释放状态时,翻转暂停状态。

display.v代码

因此,对于顶层模块display.v的代码如下:

module display(input   clk,input   rst_n,input   en_ls,input   pause_key,output reg pause_reg,output reg [5:0] led
);reg [1:0] sync_key;
reg  key_delay;
reg [19:0] debounce_cnt;
reg key_pressed; // 按键消抖逻辑
always @(posedge clk or negedge rst_n) beginif(!rst_n) beginsync_key <= 2'b11;key_delay <= 1'b1;debounce_cnt <= 20'd0;key_pressed <= 1'b0;end  else beginsync_key <= {sync_key[0], pause_key};key_delay <= sync_key[1];if(sync_key[1] != key_delay)debounce_cnt <= 20'd999_999;else if (debounce_cnt != 0)debounce_cnt <= debounce_cnt - 1;if(debounce_cnt == 0 && sync_key[1] == 1'b0)key_pressed <= 1'b1;if(debounce_cnt == 0 && sync_key[1] == 1'b1)key_pressed <= 1'b0;end
endreg key_release_flag;  // 记录按键释放事件
always @(posedge  clk or negedge rst_n) beginif(!rst_n) beginpause_reg <= 1'b0;key_release_flag <= 1'b0;end else begin// 当按键从按下状态变为释放状态时,翻转暂停状态if(key_pressed == 1'b1 && sync_key[1] == 1'b1)key_release_flag <= 1'b1;elsekey_release_flag <= 1'b0;if(key_release_flag)pause_reg <= ~pause_reg;end
end// LED闪烁控制逻辑
always @(posedge  clk or negedge rst_n) beginif(!rst_n) beginled <= 6'b000001;end else if(en_ls && !pause_reg) beginled <= {led[0], led[5:1]};end
endendmodule
LedBlink.v代码

因此,对于顶层模块LedBlink.v的代码如下:

module LedBlink(input   clk,//50Mhzinput   rst_n,//复位信号input   pause_key,output [5:0] led
);//模块间连接信号
wire en_ls;
wire pause_reg;//暂停状态信号fenpin u_fenpin(.clk    (clk),.rst_n  (rst_n),.en     (en_ls)
);display u_display(.clk    (clk),.rst_n  (rst_n),.en_ls  (en_ls),.pause_key  (pause_key),.pause_reg  (pause_reg),.led  (led)
);endmodule

2.3 烧录实验

2.3.1 编译以及一些问题

代码都写得差不多了,现在就到了编译的时候了。
在编译的时候,会发现VScode写代码后,找不到文件,这怎么编译啊?
因此,我们需要再做:
在这里插入图片描述
双击Files,点击Add All
在这里插入图片描述
然后,右键点击我们的top文件LedBlink,设置为顶层文件,编译
在这里插入图片描述
没有问题后,分配引脚
在这里插入图片描述
暂停键是KEY2,复位键是KEY1

2.3.2 烧录及一些问题

烧录的时候也出了一点小情况,就是发现效果不是我代码预计的效果。
经过搜索发现,错误是因为我用的上一次的文件,因此,还需要将之前的文件给delete,然后add新的.sof文件
在这里插入图片描述
在这里插入图片描述
然后就烧录成功了

2.3.3 实验效果

【FPGA入门】DE2-115按键控制流水灯

三、实验总结

以上是我最终的实验内容,其实一开始并没有分层,只是简单地在一个模块中实现流水灯,分层次设计后也遇到了一些问题,比如一开始我的暂停键是只有一直按着暂停键流水灯才能停止,折腾半天最后引入了key_pressed变量得以解决。

这次实验的突破在于学会了规范化分层设计,这无疑对以后的开发是有益处的。

同时,在实现的过程中,从一开始的毫无头绪到最终比较好的实现效果,AI工具起到了很大的作用。利用DS深度思考打开思路学习其中的逻辑思维,再一步步地进行理解和改良优化。

四、参考博客

VSCode配置verilog环境(代码提示+自动例化+格式化)
Nios实验入门——用Verilog编程方式完成LED流水灯显示并使用串口输出“Hello Nios-II”字符到笔记本电脑
【整理】DE2-115引脚列表 word版


文章转载自:

http://w0UADgd2.qpmwb.cn
http://wGpmKdJ5.qpmwb.cn
http://uwIO1mak.qpmwb.cn
http://PVaa2AXT.qpmwb.cn
http://aKqAqpYK.qpmwb.cn
http://X8YYYHEu.qpmwb.cn
http://Oplyv0bk.qpmwb.cn
http://eHbbZugS.qpmwb.cn
http://5kiMgG6h.qpmwb.cn
http://X87pKrqe.qpmwb.cn
http://1q1sBNCX.qpmwb.cn
http://fyeJ8s3N.qpmwb.cn
http://WaRqZswJ.qpmwb.cn
http://W2TZFTCI.qpmwb.cn
http://j8O3FPax.qpmwb.cn
http://2R2gy41D.qpmwb.cn
http://kbqx1RqG.qpmwb.cn
http://NBE35cOp.qpmwb.cn
http://VFxw6n5l.qpmwb.cn
http://Puh1uFMH.qpmwb.cn
http://lLZBzHMj.qpmwb.cn
http://MvqkHCcP.qpmwb.cn
http://BRqUq64I.qpmwb.cn
http://1peADJoj.qpmwb.cn
http://obJHPzUQ.qpmwb.cn
http://6RERtyx1.qpmwb.cn
http://U2lV2mCC.qpmwb.cn
http://qQMQMVI0.qpmwb.cn
http://6uzYkI8U.qpmwb.cn
http://0F0hiUF9.qpmwb.cn
http://www.dtcms.com/wzjs/738531.html

相关文章:

  • 新手想做网站赚钱保定制作网站软件
  • 分析网站建设流程西安网站的建设
  • 高清免费爱做网站域名价格排名
  • 美工网站视频网站点击链接怎么做的
  • 网站标题名字和备案名字体育馆做网站公司
  • 深圳网站备案点重庆网站建设电话
  • 婚庆公司介绍郑州网站seo公司
  • 获取网站缩略图的asp代码抖音品牌推广方案
  • 重庆微信营销网站建设seo就业
  • 校园网站建设培训稿免费微网站哪个好用
  • 网站是空间备案学术网站怎么做
  • 做网站时怎么透明化广告软文案例
  • 襄阳做公司网站的软件公司网站策划岗位要求
  • 南通如何制作一个网站phpcms 怎么做视频网站首页
  • 中小网站 架构搜索引擎付费推广
  • 网站建设报班浙江省建设工程招投标网站
  • 抖音代运营找客户话术龙岩seo招聘
  • wordpress批量管理工具seo流量排名工具
  • 网站上传wordpress网站建设职业怎么样
  • 海口建站软件微商怎么开通
  • 辽源网站seo希爱力双效片
  • 网站图片上的分享怎么做中企动力北京分公司
  • 网站开发分类列表营销方式和营销策略
  • 曲阜住房城乡建设局网站网站设计与网页制作
  • 网站背景如何做诸城高密网站建设
  • 海阳玖网站建设上海官方网站建设
  • 公司推广河北seo推广
  • wordpress网站主机名百度怎么在视频下方投放广告
  • 二手书网站建设策划书wordpress维护费用
  • 谎称在网站网站做维护网络工程专业就业前景