基于vhdl数字电子钟系统设计说明书内容摘要:

误,尤其是当我设计 day 模块时,对应不同年份,不同的月份,需要分多种情况,所以在这设计过程中用到了很多 if 语句,当编译时总会提示出有错误,后来经过不断编译不断修改提示错误后最终完成了 day 模块的设计。 刚开始时,我是先从比较熟练的 Quartus II 入手,当所有的设计模块都编译成功后再进一步运用 modelsim进行波形仿真,在开始编写 testbench 时,感到有些难度,后来经过翻阅查找多种相关的资料后,最终了解了 testbench 编写的方式,最终仿真出了各个模 块的波形图。 在使用 modelsim的过程中,使我更加深入地了解了其功能的运用,并且掌握其编写激励 testbench 的方式。 在这整个设计过程中,当每一步的设计提示错误,在通过修改编译正确后,都让我感到一种成就感,让我感到我在这个过程中,我学到了知识,并且学会了应用,比如进一步 加深了对 VHDL 代码编写 的了解,让我对它有了更加浓厚的兴趣, 巩固了层次化的设计方法,从设计到模块到具体的编程一步步走下去,最终在先前设计好的框架下完成了设计。 其次,本次设计中我更加深入的掌握了 VHDL 程序设计语言,了解到很多语法只能用在仿 真设计并不能综合成实际的电路。 在设计中我使用了元件例化,程序包,函数,过程等手段综合实现。 程序中我使用了较为标准的格式,提高了代码的可读性。 自顶向下的设计思想在设计数字电子系统时非常实用,可以将较为复杂的问题化简为一个个小问题,这样设计人员的思路会变得很清晰。 为了确保整个系统的正确运行,每个底层的实体在写好之后我都把它们进行了仿真,确保仿真结果正确性。 层次化设计的好处是带给我们很大的灵活性,我们可以单独对某个功能的模块进行修改而不影响其他的模块,便于升级、局部优化和维护。 直至我最终完成了整个数据电子钟的设计。 从这次设计开始到完成 ,这整个过程中让我终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。 十四、参考文献: 阎石, 数字电子技术基础 [M ]1 北京 : 高等教育出版社 ,2020. 潘松,王国栋, VHDL 实用教程〔 M〕 .成都 :电子科技大学出版社, 2020. 崔建明主编,电工电子 EDA 仿真技术 北京:高等教育出版社, 2020 21 十五、附录: 各个模块的 VHDL 代码、底层文件代 VHDL 码及 testbench代码: Second 模块 library ieee。 use。 use。 entity second is port ( clks: in std_logic。 sets: in std_logic。 alarms: in std_logic。 sa: in integer range 0 to 59。 闹铃预置时间参数 ss: in integer range 0 to 59。 随时设置时间参数 qts: out integer range 0 to 59。 输出时间 clk1: out std_logic。 sx: out integer range 0 to 59。 闹铃制定时间 sy: out integer range 0 to 59)。 输出当前时间(作为与制定闹铃时间比较) end second。 architecture miao of second is signal qs:integer range 0 to 60。 begin process(clks,sets,ss) begin if sets=39。 139。 then 调制时间使能信号 if ss=0 then qs=qs。 else qs=ss。 end if。 elsif(clks39。 event and clks=39。 139。 ) then if(qs=59) then qs=0。 clk1=39。 139。 输出分模块时钟信号 elsif qs59 then qs=qs+1。 clk1=39。 039。 秒计数 22 end if。 end if。 end process。 process(alarms,sa) begin if alarms=39。 139。 then sx=sa。 end if。 end process。 qts=qs。 sy=qs。 end miao。 秒 testbench library ieee。 use。 use。 entity test is end test。 architecture one of test is signal clks : std_logic:=39。 139。 signal sets : std_logic:=39。 139。 signal alarms : std_logic:=39。 139。 signal sa : integer :=0。 signal ss : integer :=0。 signal qts : integer :=0。 signal clk1 : std_logic。 signal sx : integer :=0。 signal sy : integer :=0。 constant clk_period : time := 1ms。 ponent second port( clks : in std_logic。 sets : in std_logic。 alarms : in std_logic。 sa : in integer range 0 to 59。 ss : in integer range 0 to 59。 qts : out integer range 0 to 59。 clk1 : out std_logic。 sx : out integer range 0 to 59。 sy : out integer range 0 to 59)。 end ponent。 begin 23 DUT :second port map(clks,sets,alarms,sa,ss,qts,clk1,sx,sy)。 clk_process :process begin clks = 39。 139。 wait for clk_period/2。 clks = 39。 039。 wait for clk_period/2。 end process。 Stimulus process stim_proc: process begin sets=39。 139。 wait for clk_period*10。 sets = 39。 039。 wait。 alarms=39。 139。 wait。 sa=0。 wait。 ss=0。 wait for clk_period*10。 wait。 end process。 END。 Minute 模块 library ieee。 use。 use。 entity minute is port 24 ( clkmn: in std_logic。 setmn: in std_logic。 alarmmn: in std_logic。 mna: in integer range 0 to 59。 mns: in integer range 0 to 59。 qtmn: out integer range 0 to 59。 clk2: out std_logic。 mnx: out integer range 0 to 59。 mny: out integer range 0 to 59)。 end minute。 architecture fen of minute is signal qmn:integer range 0 to 59。 begin process(clkmn,setmn,mns) begin if setmn=39。 139。 then if mns=0 then qmn=qmn。 else qmn=mns。 end if。 elsif(clkmn39。 event and clkmn=39。 139。 ) then if(qmn=59) then qmn=0。 clk2=39。 139。 elsif qmn59 then qmn=qmn+1。 clk2=39。 039。 end if。 end if。 end process。 process(alarmmn,mna) begin if alarmmn=39。 139。 then mnx=mna。 end if。 end process。 qtmn=qmn。 mny=qmn。 end fen。 分 testbench: library ieee。 use。 use。 entity test is end test。 25 architecture one of test is signal clkmn : std_logic:=39。 039。 signal setmn : std_logic:=39。 039。 signal alarmmn : std_logic:=39。 139。 signal mna : integer :=30。 signal mns : integer :=12。 signal qtmn : integer :=0。 signal clk2 : std_logic。 signal mnx : integer :=0。 signal mny : integer :=0。 constant clk_period : time := 1ms。 ponent minute port( clkmn : in std_logic:=39。 139。 setmn : in std_logic:=39。 139。 alarmmn : in std_logic:=39。 139。 mna : in integer:=0。 mns : in integer:=0。 qtmn : out integer:=0。 clk2 : out std_logic。 mnx : out integer:=0。 mny : out integer:=0)。 end ponent。 begin DUT :minute port map(clkmn,setmn,alarmmn,mna,mns,qtmn,clk2,mnx,mny)。 clk_process :process begin clkmn = 39。 139。 wait for clk_period/2。 clkmn = 39。 039。 wait for clk_period/2。 end process。 26。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。