基于MAXPLUSii的数字钟实验(含源程序代码)
- 格式:doc
- 大小:1.20 MB
- 文档页数:5
max+plus2数电实验报告小红书实验目的实验原理实验器材实验步骤实验结果实验分析实验结论实验目的本次实验旨在通过实践探究max+plus2数电的工作原理和应用,在实验中加深对数电原理的理解,同时提高实验操作能力和解决问题的能力。
实验原理max+plus2数电是一种常用的数字电路开发板,它集成了多种数字电路模块,可进行逻辑设计和数字信号处理等实验。
其主要原理是通过编程控制和数字信号的处理,在实验中能实现各种数字逻辑电路的功能。
实验器材本次实验所需的器材如下:1. max+plus2数电开发板2. 电源线3. 连接线4. 逻辑门模块5. LED灯模块6. 开关模块实验步骤1. 将max+plus2数电开发板连接到电源线,并将电源线插入电源插座,确保电源正常供应。
2. 根据实验设计的逻辑电路图,将逻辑门模块、LED灯模块和开关模块连接到max+plus2数电开发板的相应端口。
3. 打开开发板的电源开关,确保电源正常供电。
4. 编程控制max+plus2数电开发板,将相应的逻辑电路图转化为代码,并加载到开发板中。
5. 通过操作开发板上的开关,观察LED灯的亮灭情况,检查逻辑电路的功能是否正常。
实验结果经过一番调试和观察,实验结果如下:1. 当开关处于某个特定状态时,LED灯亮起。
2. 当开关处于其他状态时,LED灯熄灭。
实验分析通过实验结果的观察和分析,我们可以得出以下结论:1. max+plus2数电开发板可以通过编程控制,实现各种逻辑电路的功能。
2. 实验中所使用的逻辑门模块、LED灯模块和开关模块均能正常工作,与开发板配套使用效果良好。
3. 通过实验,我们进一步理解了逻辑电路的原理和工作方式。
实验结论本次实验通过实践操作max+plus2数电开发板,验证了其能够实现逻辑电路的功能。
实验结果表明,max+plus2数电开发板具有良好的稳定性和可靠性,可以作为数字电路实验的理想工具。
通过这次实验,我们不仅提高了实验操作能力,也深化了对数电原理的理解,为进一步学习和应用数字电路奠定了基础。
实验一MAX+PLUSⅡ软件的使用一、实验目的:1、学习VHDL语言的基本指令及编程方法。
2、熟悉在PC机上运用MAX+PLUSⅡ软件和EPLD进行电路设计的设计和仿真过程。
二、实验设备:PC机三、实验内容:1、设计一个2选1数据选择器,并验证其功能。
用VHDL语言进行设计,并仿真设计结果。
真值表如下所示:2、用VHDL语言输入法设计一个四舍五入判别电路,其输入为8421BCD码,要求当输入大于或等于5时,判别电路输出为1;反之为0。
四、实验步骤:(一)2选1数据选择器的设计1、采用文本编辑器输入2选1数据选择器VHDL语言源程序,建立工程。
VHDL语言源程序如下所示:library ieee;use ieee.std_logic_1164.all;entity mux21 isport(a,b: in std_logic;s: in std_logic;y: out std_logic );end mux21;architecture mux_arch of mux21 isbeginy<=a when s='0' elseb when s= '1';end mux_arch;2、进行编译后,仿真结果如下所示:a、b为输入端,s为控制端,当s为0时,输出与a的值一致,反之与b的值一致。
(二)四舍五入判别电路的设计1、采用文本编辑器输入四舍五入判别电路VHDL语言源程序,建立工程。
VHDL语言源程序如下所示:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY m45 ISpORT(din: IN STD_LOGIC_VECTOR(3 DOWNTO 0);q : OUT STD_LOGIC);END ;ARCHITECTURE ART OF m45 ISBEGINq<= '1' WHEN din>=5 ELSE'0';END ;2、进行编译后,仿真结果如下所示:输入为0~4时,输出y为低电平,输入为5~15时输出为高电平,实现了四舍五入的功能。
EDA(VHDL & FPGA)实验指导教程编者林海波长春工程学院电子信息教研室前言本实验指导教程是EDA(VHDL & FPGA)上机实验指导教材,上机实验前,学生应依照教师指定的实验项目,认真预习实验内容,提前确定实验方案、初步设计实验项目的逻辑电路图或编写、设计VHDL程序,编制VHDL程序清单。
上机实验是一个验证和调试过程,只有充分的预习才能最大的发挥学习效果。
学生在实验教学中要认真依据要求完成每个实验项目,并按照要求详细撰写本书中指定实验项目的实验报告。
教师批阅后,将报告发回。
学生所获得的成绩将作为平时上机实验成绩的一部分,记入期末的考核成绩。
在期末必须上交全部实验报告,并装订存档,不及时交回者,实验成绩记为零分。
本实验指导教程可以作为《VHDL与数字系统设计》课程的实验指导书使用,也可以作为《EDA(VHDL)课程设计》的参考书使用。
《VHDL与数字系统设计》课程组2009年5月第一章 MAX+PLUS Ⅱ EDA 软件操作第一节 逻辑设计的输入方法逻辑设计的输入方法有图形输入、文本输入等。
输入方法不同,生成的文件格式也有所不同。
我们分别以图形输入法和文本输入法介绍MAX+plus II 软件的使用方法。
1.1 图形设计输入法我们将用一简单的实例介绍该输入法。
启动MAX+plus II ,该管理器窗口被打开。
1. 项目的建立用户的每个独立设计都对应一个项目,每个项目可包含一个或多个设计文件,其中有一个是顶层文件,顶层文件的名字必须与项目名相同。
编译器时对项目中的顶层文件进行编译,所以必须确定一个文件作为当前项目。
对于每个新的项目应该建立一个单独的子目录,当指定项目名称时,也就同时指定了保存该设计项目的子目录名。
建立项目名称的步骤如下:1.在File 菜单中选择Project 的Name 项(图1.1),将出现图1.2对画框。
图1.1图1.22.在Project Name 框内,键入设计项目名(注意:一定是英文名)和所选的路径,单击OK 。
实验一 MAX –plusII 及开发系统使用一、实验目的1、 熟悉MAX-plus Ⅱ的使用方法,以及EDA 的基本设计流程;2、 掌握基于文本(VHDL )和原理图输入方法设计简单的组合电路3、 初步掌握层次化设计的方法4、 熟悉DXT-B Ⅲ型EDA 试验开发系统的使用 二、主要实验设备PC 机一台,DXT-B3 EDA 实验系统一台。
三、实验原理EDA 技术系列实验是建立在数字电路基础上,采用先进的EDA 技术完成数字系统设计的一个更高层次的设计性实验。
它是借助大规模可编程逻辑器件(C PLD/FPGA ),采用在系统可编程技术(ISP ),利用电子设计自动化软件和硬件描述语言,在计算机平台上完成系统的设计、编译、仿真、逻辑综合、布局布线,并下载到大规模可编程逻辑器件。
最终完成专用集成电路(ASIC )或片上数字系统(SOC )的设计。
EDA 技术设计主要是在计算机平台上进行,因此实验方式,实验手段和实验仪器与传统的实验有很大的区别,主要体现在以下几个方面:1、 实验的核心部件是大规模可编程逻辑器件,实验的设计基本只针对CPLD/FPGA 进行。
通过相应的管脚安排,利用实验箱外围的辅助电路进行设计的硬件测试和验证。
2、 大规模可编程逻辑器件可重复下载,基本没有耗材;3、 设计的主要过程在计算机上进行,自动化程度高,人机交互性好,修改、验证实验简单.四、Max_plus Ⅱ 10.0的使用。
max+plus Ⅱ软件基本设计流程如图1-1所示:(一)新建项目文件一般可以是图形文件(文件后缀.gdf )或由硬件描述语言编写的文本文件(VHDL 编写的文件后缀为.vhd ,Verilog HDL 编写的文件后缀为.v )。
具体操作过程如下:在File 下拉菜单中选择New 将跳出如图1-2所示新建文件类型选择对话框,然后选择需要建立的文件类型。
四种文件类型分别为:图形编辑文件、符号编辑文件、文本图1-2新建文件类型图1-1 EDA 项目设计流程图编辑文件和波形编辑文件。
第三章原理图输入法设计时序逻辑电路时序逻辑电路是数字逻辑电路中最重要的一类,一个时序逻辑电路包含组合逻辑网络和存贮单元两大部分,其中组合逻辑网络部分可用译码器、数据选择器或其他组合网络模块实现,而存储单元部分则用计数器、移位寄存器或通用寄存器等实现。
本章将以一个简易数字钟的分钟和秒部分为例学习如何通过MAX+plus II软件的图形编辑器,利用原理图库中元件进行时序逻辑电路的设计输入,如何用波形编辑器进行输入激励波形输入,再用MAX+plus II的模拟器和时延分析器进行逻辑验证和分析。
并学习用层次显示工具进行自顶向下的设计。
3.1 设计输入和编译通过图形编辑器进行时序逻辑电路设计输入的过程和第二章中组合逻辑设计输入的过程是一样的。
一个简易数字钟的分钟和秒部分都可以认为是一个模60计数器,而模60计数器可以通过两个模10计数器采用同步置0法加上适当的反馈完成。
图3.1 74160的元件符号表3.1 74160的功能表输入输出CLK LDN CLRN ENP ENT D C B A QD QC QB QA RCOX X L X X L L L L L↑L H X X d c b a d c b a *↑H H X L QD QC QB QA *↑H H L X QD QC QB QA L↑H H H H L L L L L↑H H H H L L L H L↑H H H H L L H L L↑H H H H L L H H L↑H H H H L H L L L↑H H H H L H L H L↑H H H H L H H L L↑H H H H L H H H L↑H H H H H L L L L↑H H H H H L L H H* RCO = QD & QA & ENT和组合逻辑电路的设计输入一样,先要建立项目和图形输入文件(示例中两个文件名用的是MOD60),再调入元件符号。
红用maxplus绿灯30秒倒计时计数器代码以下是使用 MAX+PLUS II 进行 30 秒倒计时计数器的示例代码:
```
// 定义计数器变量
unsigned int count = 0;
// 初始化计数器
void setup() {
// 设置计数器初始值为 0
count = 0;
// 设置绿灯闪烁频率为 250 Hz
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
delay(250);
digitalWrite(13, LOW);
delay(250);
}
// 更新计数器值
void loop() {
// 计数器递增
count++;
// 如果计数器值大于 30,则重置计数器并重新开始倒计时
if (count > 30) {
count = 0;
}
// 绿灯闪烁
if (count % 250 == 0) {
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}
}
```
上述代码使用 MAX+PLUS II 的 COUNT 指令来计算倒计时时间,其中 COUNT 指令的参数为 30,表示需要倒计时 30 秒。
代码中的
`setup()` 函数和 `loop()` 函数分别用于设置计数器和绿灯闪烁
的频率和周期。
扫描library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity shch isport(sh,sl,fh,fl,shh,shd:in std_logic_vector(3 downto 0);clk: in std_logic;--con:in std_logic_vector(3 downto 0);smm:out std_logic_vector(5 downto 0);ou:out std_logic_vector(7 downto 0));end shch;architecture sh_ch of shch issignal tmpe:std_logic_vector(3 downto 0);signal count:std_logic_vector(3 downto 0);signal ouu:std_logic_vector(7 downto 0);beginprocess(clk)beginif (clk'event and clk='1') thenif count="0101" thencount<="0000";elsecount<=count+'1';end if;end if;end process;smm<="011111" when count="0101" else "101111" when count="0100"else"110111" when count="0011"else"111011" when count="0010"else"111101" when count="0001"else"111110" when count="0000";tmpe<=sl when count="0000" elsesh when count="0001" elsefl when count="0010" elsefh when count="0011" elseshd when count="0100" elseshh when count="0101" ;process(tmpe)begincase tmpe iswhen "0000"=>ouu<="00000011"; when "0001"=>ouu<="10011111"; when "0010"=>ouu<="00100101"; when "0011"=>ouu<="00001101"; when "0100"=>ouu<="10011001"; when "0101"=>ouu<="01001001"; when "0110"=>ouu<="01000001"; when "0111"=>ouu<="00011111"; when "1000"=>ouu<="00000001"; when "1001"=>ouu<="00001001"; when others=>ouu<="00000011"; end case;end process;ou<=ouu;end sh_ch;分频器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all; entity jsq_1000 isport(clk:in std_logic;cs: out std_logic);end jsq_1000;architecture jsq of jsq_1000 is beginprocess(clk)variable count :integer;beginif (clk'event and clk='1') thenif count<1024 thencount:=count+1;cs<='0';elsecount:=0;cs<='1';end if;end if;end process;end jsq;时分秒计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity sfsh isport(rst, clk:in std_logic;sh,sl,fh,fl,shh,shd:out std_logic_vector(3 downto 0));end sfsh;architecture sf_sh of sfsh issignal shw,slw,fhw,flw,shhw,shdw:std_logic_vector(3 downto 0); signal cs,ch: std_logic;beginprocess(clk,rst)beginif rst='0' thenshw<="0100";slw<="0000";elsif (clk'event and clk='1') thenif (shw = "0101") thenif (slw = "1001") then shw<="0000";slw<="0000";cs<='1';elseslw<=slw+1;cs<='0';end if;elsif (slw="1001") then slw<="0000";shw<=shw+1;cs<='0';elseslw<=slw+1;cs<='0';end if;end if;end process;process(cs,rst)beginif rst='0' thenfhw<="0101";flw<="1001";elsif (cs'event and cs='1') then if (fhw = "0101") thenif (flw = "1001") thenfhw<="0000";flw<="0000";ch<='1';elseflw<=flw+1;ch<='0';end if;elsif (flw="1001") thenflw<="0000";fhw<=fhw+1;ch<='0';elseflw<=flw+1;ch<='0';end if;end if;end process;process(ch,rst)beginif rst='0' thenshhw<="0010";shdw<="0011";elsif (ch'event and ch='1') then if (shhw = "0010") thenif (shdw = "0011") then shhw<="0000";shdw<="0000";elseshdw<=shdw+1;end if;elsif (shdw="1001") then shhw<=shhw+1;shdw<="0000";elseshdw<=shdw+1;end if;end if;end process;sh<=shw;sl<=slw;fh<=fhw;fl<=flw;shh<=shhw;shd<=shdw;end sf_sh;元件例化library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity shzh isport(clk,rst: in std_logic;ou:out std_logic_vector(7 downto 0);smmm:out std_logic_vector(5 downto 0));end shzh;architecture sh_zh of shzh iscomponent shchport(sh,sl,fh,fl,shh,shd:in std_logic_vector(3 downto 0);clk: in std_logic;smm:out std_logic_vector(5 downto 0);ou:out std_logic_vector(7 downto 0));end component;component sfshport(rst, clk:in std_logic;sh,sl,fh,fl,shh,shd:out std_logic_vector(3 downto 0)); end component;component jsq_1000port(clk:in std_logic;cs: out std_logic);end component;signal coo:std_logic;signal sshh:std_logic_vector(3 downto 0);signal ssll:std_logic_vector(3 downto 0);signal ffhh:std_logic_vector(3 downto 0);signal ffll:std_logic_vector(3 downto 0);signal sshhh:std_logic_vector(3 downto 0);signal sshdd:std_logic_vector(3 downto 0);beginu2:jsq_1000 port map(clk,coo);u3:sfsh port map(rst,coo,sshh,ssll,ffhh,ffll,sshhh,sshdd);u4:shch port map(sshh,ssll,ffhh,ffll,sshhh,sshdd,clk,smmm,ou); end sh_zh;。
源程序与仿真图CNT24library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt24 isport(clk,rst:in std_logic;co:out std_logic;qh,ql :out std_logic_vector(3 downto 0)); end cnt24;architecture behave of cnt24 issignal tmpl,tmph:std_logic_vector(3 downto 0);beginprocess(rst,clk)beginif(rst='1') then tmpl<="0000";tmph<="0000";co<='0';elsif(clk'event and clk='1')thenif(tmpl=9)thentmpl<="0000";tmph<=tmph+1;else tmpl<=tmpl+1;if(tmph=2) thenif(tmpl=3) then tmpl<="0000";tmph<="0000";co<='1';else tmpl<=tmpl+1;co<='0';end if;end if;end if;end if;ql<=tmpl;qh<=tmph;end process;end behave;CNT60library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt60 isport(clk,rst:in std_logic;co:out std_logic;qh,ql :out std_logic_vector(3 downto 0)); end cnt60;architecture behave of cnt60 issignal tmpl,tmph:std_logic_vector(3 downto 0);beginprocess(rst,clk)beginif(rst='1') then tmpl<="0000";tmph<="0000";co<='0';elsif(clk'event and clk='1')thenif(tmpl=9)then tmpl<="0000";if(tmph=5) then tmph<="0000";co<='1';elsetmph<=tmph+1;co<='0';end if;else tmpl<=tmpl+1;co<='0';end if;end if;ql<=tmpl;qh<=tmph;end process;end behave;DIV1000Library IEEE;Use IEEE.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use IEEE.std_logic_arith.all;Entity div1000 isPort( clk: in std_logic;--from system clock(1KHz)f1hz: out std_logic);-- 1Hz output signalend div1000;architecture arch of div1000 issignal count : integer range 0 to 499;--count from 0 to 499-local sisignal temp:std_logic;beginprocess (clk)beginif rising_edge(clk) thenif count>=499 thentemp<=not temp;count<=0;else count<=count+1;end if;end if;end process;f1hz<=temp;end arch;JIAOZHUNlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jiaozhun isport(clk1,clk2,qo:in std_logic;co:out std_logic);end jiaozhun;architecture behave of jiaozhun isbeginprocess(qo,clk1,clk2)beginif(qo='0') then co<=clk1;else co<=clk2;end if;end process;end behave;SCAN6library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity scan6 isport(clk:in std_logic;a1,a2,a4,a5,a7,a8:in std_logic_vector(3 downto 0);seg7: out std_logic_vector(6 downto 0);bt : out std_logic_vector(7 downto 0)); end scan6;architecture behav of scan6 issignal cnt8:std_logic_vector(2 downto 0); signal a: std_logic_vector(3 downto 0); beginprocess(cnt8)begincase cnt8 iswhen "000"=>bt<="00000001";a<=a1; when "001"=>bt<="00000010";a<=a2; when "010"=>bt<="00000100";a<="1010"; when "011"=>bt<="00001000";a<=a4; when "100"=>bt<="00010000";a<=a5; when "101"=>bt<="00100000";a<="1010"; when "110"=>bt<="01000000";a<=a7; when "111"=>bt<="10000000";a<=a8; when others=>null;end case;end process ;process(clk)beginif (clk'event and clk='1')then cnt8<=cnt8+1;end if;end process ;process(a)begincase a iswhen "0000"=>seg7<="1111110";when "0001"=>seg7<="0110000";when "0010"=>seg7<="1101101";when "0011"=>seg7<="1111001";when "0100"=>seg7<="0110011";when "0101"=>seg7<="1011011";when "0110"=>seg7<="1011111";when "0111"=>seg7<="1110000";when "1000"=>seg7<="1111111";when "1001"=>seg7<="1111011";when "1010"=>seg7<="0000001";when others=>null;end case;end process ;end behav;TOPCNT24JIAOZHUNSCAN6。