教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

基于Verilog HDL的数字系统设计入门教程(CPLD篇)——第四天(2)

来源:网络收集 时间:2026-08-16
导读: CPLD,FPGA,Verilog,VHDL,数字系统, 基于 VerilogHDL 的数字系统设计入门教程(CPLD 篇)——第四天3.4原理分析和设计思路我们将整个功能分为三个模块: 时钟模块:产生 10ms 一个周期的时钟(频率为 100Hz) ; 按键

CPLD,FPGA,Verilog,VHDL,数字系统,

基于 Verilog HDL 的数字系统设计入门教程(CPLD 篇)——第四天 3.4 原理分析和设计思路  我们将整个功能分为三个模块:  时钟模块:产生 10ms 一个周期的时钟(频率为 100Hz) ;  按键消抖模块: 对按键的动作消除抖动, 当按下时输出电平, 未按下式输出高电平;  LED 显示模块:通过按键的输入对 LED 显示状态进行调整输出。  整个结构如下图所示:     当然, 我们也可以使用一个模块把所有的事情做了。 本实验这样设计的目的在于让大家 掌握基于原理图和源代码输入联合设计的方式,并对模块的划分有个初步的概念。    这些模块,我们经过一些修改,是可以快速利用到其他的项目中的,这样可以解决我们 的重复编程所花费的时间。    按照本教程一开始介绍的连接方法,实验扩展板上的 LED、开关和 CPLD 的连接关系如 下表所示:  器件  D1  D2  D3  D4  D5  D6  D7  D8  B1  信号名  LED[0]  LED[1]  LED[2]  LED[3]  LED[4]  LED[5]  LED[6]  LED[7]  KEY[0]  CPLD 启蒙板对应引脚  40  41  42  43  47  48  49  50  84 3.5  1. 2. 3. 4. 5. 6. 7. 8. 9.源代码 时钟分频模块代码:  module CLK_DIV(CLK,DIVCLK);    input  CLK;            output  DIVCLK;            reg    DIVCLK;            reg    [DIV_WIDTH‐1:0]counter;      parameter  DIV_Num = 500000;  parameter  DIV_WIDTH = 19;                    //时钟偶数分频模块  //定义输入时钟  //定义输出时钟  //定义寄存器  //定义计数寄存器  //参数,定义分频参数  //参数,定义分频参数占用的位宽  ~ 6 ~ 线路人生|Circuitry 

CPLD,FPGA,Verilog,VHDL,数字系统,

基于 Verilog HDL 的数字系统设计入门教程(CPLD 篇)——第四天  10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. always @ (posedge CLK)         //分频过程    begin      if(counter == ((DIV_Num>>1)‐1))  //注意分频数的计算公式        begin          counter <= 0;          DIVCLK    <= ~DIVCLK;        end      else        counter <= counter + 1'b1;    end  endmodule   此模块中,我们使用了参数(关键字 parameter) ,在编译时我们可以改变参数值来初始 化模块,后面的实验步骤中我们会通过实例来演示如何设置。    点亮 LED 的模块需要实现 Key 每次按下(从高电平到低电平) ,LED 的状态改变一次。 具体代码:  1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.     module LightLED(Key,LED);      input  Key;           output  [7:0]LED;         reg    [7:0]LED;           always @(negedge Key)          begin      if(LED == 8'b11111111)        LED <= 8'b00000001;      else        LED <= LED<<1 | LED;    end  endmodule            //点亮 LED 模块  //定义输入  //定义输出  //定义寄存器  //按键按下的时候改变 LED 状态    //全部点亮后的复位  //每次多点亮一个 按键消抖模块:  1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. module Debounce(CLK,KeyIn,KeyOut);        input  CLK;                 input  [KEY_WIDTH‐1:0]KeyIn;          output  [KEY_WIDTH‐1:0]KeyOut;        reg    [KEY_WIDTH‐1:0]KeyTemp1,KeyTemp2;     parameter  KEY_WIDTH = 8;            always @(posedge CLK)    begin      KeyTemp1 <= KeyIn;              KeyTemp2 <= KeyTemp1;          end  assign KeyOut = (KeyTemp1 | KeyTemp2);      ~ 7 ~  //按键去抖模块  //定义时钟输入  //定义按键输入  //定义按键输出  //定义寄存器  //参数,定义按键的个数 //当前的按键值存入寄存器  //上一次的按键值存入寄存器  //两次按键值进行比较输出  线路人生|Circuitry  

CPLD,FPGA,Verilog,VHDL,数字系统,

基于 Verilog HDL 的数字系统设计入门教程(CPLD 篇)——第四天  15. endmodule    这个模块中,时钟输入为一个慢速时钟,频率为 100Hz(每周期 10ms) ,当有按键按下 时,先将此值存入寄存器,隔 10ms 后再次检测按键的输入,如果仍然为低电平,则确认此 按键按下;如果第二次为高电平,则认为上一次的按键输入为抖动期。 3.6实验步骤   (1)利用新项目向导在“D:\Tutorial\EPM570\DAY04\Exp01”目录下建立一个名为 “KeyAndLED”的项目,选择好相应的 CPLD 器件。    (2)新建三个 Verilog  HDL 设计文件,将三个模块的代码分别设计并保存为 CLK_DIV.v, LightLED.v,Debounce.v。    (3)为三个模块生成符号文件(*.bsf) :    选择 Files > Create/Update > Create Symbol Files for Current File 或在 Project Navigator 窗 口的 Files 选项卡中,在相应的文件上点击右键,在弹出的菜单中选择 Create Symbol Files for  Current File(如下图所示) 。     生成成功后会弹出如下窗口:     (4)利用 MegaWizard  Plug‐In  Manager 例化 MAX  II 的片内晶振,命名为 OSC(具体的 步骤请回忆一下前面的教程) 。最后一步中注意默认是勾选上 …… 此处隐藏:2499字,全部文档内容请下载后查看。喜欢就下载吧 ……

基于Verilog HDL的数字系统设计入门教程(CPLD篇)——第四天(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/115981.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)