十进制计数器设计

合集下载

同步和异步十进制加法计数器的设计

同步和异步十进制加法计数器的设计

同步和异步十进制加法计数器的设计全文共四篇示例,供读者参考第一篇示例:同步和异步是计算机系统中常用的两种通信机制,它们在十进制加法计数器设计中起到了至关重要的作用。

在这篇文章中,我们将深入探讨同步和异步十进制加法计数器的设计原理及应用。

让我们来了解一下十进制加法计数器的基本概念。

十进制加法计数器是一种用于执行十进制数字相加的数字电路。

它通常包含多个十进制加法器单元,每个单元用于对应一个十进制数位的运算。

在进行加法操作时,每个数位上的数字相加后,可能会产生进位,这就需要进位传递的机制来满足计数器的正确操作。

在同步十进制加法计数器中,每个十进制加法器单元都与一个时钟信号同步,所有的操作都按照时钟信号的节拍来进行。

具体来说,当一个数位的加法计算完成后,会将结果通过进位端口传递给下一个数位的加法器单元,这样就能确保每个数位的计算都是按照特定的顺序来进行的。

同步十进制加法计数器的设计较为简单,在时序控制方面有很好的可控性,但由于需要受限于时钟信号的频率,其速度受到了一定的限制。

在实际应用中,根据不同的需求可以选择同步或异步十进制加法计数器。

如果对计数器的速度要求较高,并且能够承受一定的设计复杂度,那么可以选择异步设计。

如果对计数器的稳定性和可控性要求较高,而速度不是首要考虑因素,那么同步设计可能更为适合。

无论是同步还是异步,十进制加法计数器的设计都需要考虑诸多因素,如延迟、数据传输、进位控制等。

通过合理的设计和优化,可以实现一个高性能和稳定的十进制加法计数器,在数字电路、计算机硬件等领域中有着广泛的应用。

同步和异步十进制加法计数器的设计都有其各自的优势和劣势,需要根据具体的需求来选择合适的设计方案。

通过不断的研究和实践,我们可以进一步完善十进制加法计数器的设计,为计算机系统的性能提升和应用拓展做出贡献。

希望这篇文章能够为大家提供一些启发和帮助,让我们共同探索数字电路设计的奥秘,开拓计算机科学的新境界。

第二篇示例:同步和异步计数器都是数字电路中常见的设计,用于实现特定的计数功能。

同步和异步十进制加法计数器的设计

同步和异步十进制加法计数器的设计

同步和异步十进制加法计数器的设计1. 引言1.1 引言在计算机科学领域,同步和异步十进制加法计数器是常见的设计。

它们可用于对数字进行加法运算,是数字逻辑电路中的重要组成部分。

同步计数器和异步计数器的设计原理和工作方式有所不同,各有优劣势。

同步十进制加法计数器是一种通过时钟信号同步运行的计数器,采用同步电路设计。

它的设计目的是确保每一位数字在同一时刻进行加法运算,以保证正确性和稳定性。

同步计数器具有较高的精确度和可靠性,但需要更多的电路元件和较复杂的控制逻辑。

与之相反,异步十进制加法计数器采用异步电路设计,每一位数字都根据前一位数字的状态自主运行。

这种设计方式减少了电路复杂度和功耗,但可能会造成计算不稳定或出错的情况。

在选择计数器设计时需要根据实际需求和应用场景进行权衡。

通过对同步和异步十进制加法计数器的设计进行比较分析,可以更好地理解它们的优劣势和适用范围。

结合实际的应用案例,可以更好地理解它们在数字逻辑电路中的作用和价值。

2. 正文2.1 设计目的在设计同步和异步十进制加法计数器时,我们的主要目的是实现一个能够对十进制数字进行加法运算的电路。

具体来说,我们希望设计一个可以接受两个十进制数字作为输入,并输出它们的和的计数器。

设计的目的是为了实现数字的加法计算,并且保证计数器的正确性、稳定性和效率。

在设计过程中,我们需要考虑到各种可能的输入情况,例如进位、溢出等,并确保计数器能够正确处理这些情况。

我们也希望设计出一个简洁、高效的电路,以确保在实际应用中能够满足性能要求。

我们也需要考虑到电路的功耗和面积,以确保设计的成本和资源利用是否合理。

设计同步和异步十进制加法计数器的目的是为了实现对十进制数字的加法运算,保证计数器的正确性和性能,并在满足需求的前提下尽可能地降低成本和资源消耗。

2.2 同步十进制加法计数器的设计同步十进制加法计数器是一种利用时钟脉冲同步输入和输出的数字电路,用于实现十进制加法运算。

数电实验报告十进制计数器设计

数电实验报告十进制计数器设计
if (!RST) Q1 <= 0;
else if (EN) begin
if (!LOAD) Q1 <= DATA;
else if (Q1<9) Q1 <= Q1+1;
else Q1 <= 4'b0000;
end
end
always @(Q1)
if (Q1==4'h9) COUT = 1'b1;
else COUT = 1'b0;
Endmodule
二、仿真波形
三、电路图
四、引脚配置(约束文件)
五、思考与探索
1.本试验没有连接到实验板测试,不过可以将输出信号接至LED灯口,发光为高电平,根据发光的顺序判断计数器是否正常工作
2.遇到的问题,时钟信号上升沿和下降沿判断错误
3.二进制码->格雷码:从最右边该位的值,最左边一位不变
input EN;
input RST;
input LOAD;
input [3:0] DATA;
output [3:0] DOUT;
output COUT;
reg [3:0] Q1 ;
reg COUT ;
assign DOUT = Q1;
always @(posedge CLK or negedge RST) begin
实验报告
2017年12月7日成绩:
姓名
学号
班级
专业
课程名称
《数字电路实验》
任课老师
指导老师
机位号
实验序号
12
实验名称
十进制计数器设计
实验时间
2017.12.7
实验地点
一教225

实验四 多位十进制计数器的设计与实现

实验四 多位十进制计数器的设计与实现

实验四多位十进制计数器的设计与实现(4 课时)实验目的1.熟练掌握设计电路下载到芯片的关键设置与基本步骤和利用实验箱上的输入信号和输出显示器件在线测试设计电路的方法。

2.学习使用VHDL 语言设计多位计数器和7 段译码电路的方法。

3.学习多位数码管的动态显示原理,掌握数码管驱动电路灵活设计方法。

实验原理1.米字形数码管(共阴)笔画接口:A1、A2、B、C、D1、D2、E、F、G、H、J、K、M、N、O、P、DP位选接口:sel0,sel1,sel2,sel3.sel0 Sel1 Sel2 Sel3 选中的数码管0 1 1 1 第4 位1 0 1 1 第3 位1 1 0 1 第2 位1 1 1 0 第1 位(右)2. 8 位7 段数码管(共阴)笔画接口:a、b、c、d、e、f、g、dp位选接口:sel0,sel1,sel2,sel3(可不用).Sel2 Sel1 Sel0 选中点亮的数码管1 1 1 第1 位(最右)1 1 0 第2 位1 0 1 第3 位1 0 0 第4 位0 1 1 第5 位0 1 0 第6 位0 0 1 第7 位0 0 0 第8 位实验内容与要求1.设计一个十进制计数器,具有显示位置随计数时钟在八个数码管中左右滚动的功能。

(6 分)2.设计一个符号显示电路,使其通过米字型数码管显示至少四页的自定义英文和数字符号。

(每页4 个字符)(3 分)3.设计一个4 位十进制计数器,具有加减计数功能和置数功能,并能通过数码管显示计数结果。

减数为零时发声报警。

(3 分)1:library IEEE;use IEEE.std_logic_1164.all;use IEEE.Std_logic_unsigned.all;entity cnt10 isport (clk : in std_logic;data_out : out std_logic_vector (7 downto 0);selout: out std_logic_vector (2 downto 0));end entity;architecture art1 of cnt10 isbeginprocess(clk)variable cnt1:integer range 0 to 9; beginif clk'event and clk='1' thencnt1:=cnt1+1;if cnt1>9 thencnt1:=0;end if;end if;case cnt1 iswhen 0 => data_out <= "11111100"; -- 0 when 1 => data_out <= "01100000"; -- 1 when 2 => data_out <= "11011010"; -- 2 when 3 => data_out <= "11110010"; -- 3 when 4 => data_out <= "01100110"; -- 4 when 5 => data_out <= "10110110"; -- 5 when 6 => data_out <= "10111110"; -- 6 when 7 => data_out <= "11100000"; -- 7 when 8 => data_out <= "11111100"; -- 8 when 9 => data_out <= "11101110"; -- 9 when others => NULL;end case;end process;process(clk)variable cntsel:integer range 0 to 13; beginif clk'event and clk='1' then cntsel:=cntsel+1;if cntsel>13 thencntsel:=0;end if;end if;case cntsel iswhen 0 => selout <= "111";when 1 => selout <= "110";when 2 => selout <= "101";when 3 => selout <= "100";when 4 => selout <= "011";when 5 => selout <= "010";when 6 => selout <= "001";when 7 => selout <= "000";when 8 => selout <= "001";when 9 => selout <= "010";when others => NULL;end case;end process;end art1;2:Library IEEE;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity miguan isport( clk : in std_logic;WX : out std_logic_vector (3 downto 0);DX : out std_logic_vector (15 downto 0)); End entity miguan;Architecture bhv of miguan isType state is(st0,st1,st2,st3);Signal current_state:state :=st0;Signal next_state:state;Signal shu1 : integer range 0 to 3;Signal shu2 : std_logic_vector(13 downto 0); Signal A,B,C,D:std_logic_vector(15 DOWNTO 0); Beginprocess (clk) isBeginIf (clk'event and clk='1') thenshu2<=shu2+"00000000000001";If shu2="11111111111111"thencurrent_state<=NEXT_STATE;elsecurrent_state<=current_state;End if;End if;End process;Process (current_state)BeginCase current_state iswhenst0=>A<="0110101000000000";--xB<="0000000011110000";--lC<="1000010000011110";--dD<="0001000110111011";--sNEXT_STATE<=ST1;whenst1=>A<="0000000011111100";--UB<="1000010000000011";--TC<="0001000111110011";--ED<="0011000111000111";--RNEXT_STATE<=ST2;whenst2=>A<="0000000011111111";--0B<="0001000111111011";--6C<="0000000000001100";--1D<="0001000111111111";--8NEXT_STATE<=st3;whenst3=>A<="0001000111111011";--6B<="1001010110000000";--4C<="0001000110111011";--5D<="0000000000001100";--1NEXT_STATE<=ST0;End case;End process;Process (clk) isBeginif rising_edge(clk) thenif shu1>3 thenshu1<=0;elseshu1<=shu1+1;end if;case shu1 isWHEN 0 =>WX<="1110";DX<=A;WHEN 1 =>WX<="1101";DX<=B;WHEN 2 =>WX<="1011";DX<=C;WHEN 3 =>WX<="0111";DX<=D;End case;End if;End process;End architecture bhv;3:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity wybcount4 isport(count_clk,saopin_clk,en,load,reset,add_sub:in std_logic;data_in3:in std_logic_vector(3 downto 0);--Left1data_in2:in std_logic_vector(3 downto 0);data_in1:in std_logic_vector(3 downto 0);data_in0:in std_logic_vector(3 downto 0);--Right1duanxuan:out std_logic_vector(7 downto 0);--duan xuansel:out std_logic_vector(1 downto 0);--wei xuanbell:out std_logic);end entity wybcount4;architecture beh of wybcount4 isconstant num0:std_logic_vector:="01111110";constant num1:std_logic_vector:="00001100";constant num2:std_logic_vector:="10110110";constant num3:std_logic_vector:="10011110";constant num4:std_logic_vector:="11001100";constant num5:std_logic_vector:="11011010";constant num6:std_logic_vector:="11111010";constant num7:std_logic_vector:="00001110";constant num8:std_logic_vector:="11111110";constant num9:std_logic_vector:="11011110";function number(x:std_logic_vector) return std_logic_vector is begincase x iswhen "0000" => return num0;when "0001" => return num1;when "0010" => return num2;when "0011" => return num3;when "0100" => return num4;when "0101" => return num5;when "0110" => return num6;when "0111" => return num7;when "1000" => return num8;when "1001" => return num9;when others =>return "00000000";end case;end number;signal Q3:std_logic_vector(3 downto 0);--zhong jian zhisignal Q2:std_logic_vector(3 downto 0);signal Q1:std_logic_vector(3 downto 0);signal Q0:std_logic_vector(3 downto 0);beginprocess(count_clk,reset,en,load,add_sub) isbegin--counter10IF reset = '0' THENQ0<=(OTHERS => '0');Q1<=(OTHERS => '0');Q2<=(OTHERS => '0');Q3<=(OTHERS => '0');ELSIF rising_edge(count_clk) THENif en='0' thenif load='0' thenQ0<=data_in0;Q1<=data_in1;Q2<=data_in2;Q3<=data_in3;elsif add_sub='0' then--addQ0<=Q0+1;if Q0>=9 thenQ0<="0000";Q1<=Q1+1;if Q1>=9 thenQ1<="0000";Q2<=Q2+1;if Q2>=9 thenQ2<="0000";Q3<=Q3+1;if Q3>=9 thenQ3<="0000";end if;end if;end if;end if;else--subQ0<=Q0-1;if Q0<=0 thenQ0<="1001";Q1<=Q1-1;if Q1<=0 thenQ1<="1001";Q2<=Q2-1;if Q2<=0 thenQ2<="1001";Q3<=Q3-1;if Q3<=0 thenQ3<="1001";end if;end if;end if;end if;end if;end if;END IF;if (Q0="0000" and Q1="0000" and Q2="0000" and Q3="0000") then bell<='1';elsebell<='0';end if;end process;process(saopin_clk) is--sao pin xian shivariable qq:std_logic_vector(0 to 1);beginif (saopin_clk'event and saopin_clk='1') thenif qq<=3 then qq:=qq+1;else qq:="00";end if;end if;case qq iswhen "00" => sel<="00";duanxuan<=number(Q0);when "01" => sel<="01";duanxuan<=number(Q1);when "10" => sel<="10";duanxuan<=number(Q2);when "11" => sel<="11";duanxuan<=number(Q3);end case;end process;end architecture beh;。

十进制加法计数器

十进制加法计数器

十进制加法器设计1课程设计的任务与要求 课程设计的任务1、综合应用数字电路知识设计一个十进制加法器。

了解各种元器件的原理及其应用。

2、了解十进制加法器的工作原理。

3、掌握multisim 软件的操作并对设计进行仿真。

4、锻炼自己的动手能力和实际解决问题的能力。

5、通过本设计熟悉中规模集成电路进行时序电路和组合电路设计的方法,掌握十进制加法器的设计方法。

课程设计的要求1、设计一个十进制并运行加法运算的电路。

2、0-9十个字符用于数据输入。

3、要求在数码显示管上显示结果。

2十进制加法器设计方案制定 加法电路设计原理图1加法运算原理框图如图1所示第一步 置入两个四位二进制数。

例如(1001)2,(0011)2和(0101)2,(1000)2,同时在两个七段译码显示器上显示出对应的十进制数9,3和5,8。

第二步将置入的数运用加法电路进行加法运算。

第三步前面所得结果通过另外两个七段译码器显示。

即:加法运算方式,则(1000)2+(0110)2=(1110)2 十进制8+6=14 并在七段译码显示出14。

运算方案通过开关S1——S8接不同的高低电平来控制输入端所置的两个一位十进制数,译码显示器U8和U9分别显示所置入的两个数。

数A直接置入四位超前进位加法器74LS283的A4——A1端,74LS283的B4——B1端接四个2输入异或门。

四个2输入异或门的一输入端同时接到开关S1上,另一输入端分别接开关S5——S8,通过开关S5——S8控制数B的输入,通过加法器74LS283完成两个数A和B的相加。

由于译码显示器只能显示0——9,所以当A+B>9时不能显示,我们在此用另一片芯片74LS283完成二进制码与8421BCD码的转换,即S>9(1001)2时加上3(0011)2,产生的进位信号送入译码器U10来显示结果的十位,U11显示结果的个位。

3十进制加法器电路设计加法电路的实现用两片4位全加器74LS283和门电路设计一位8421BCD码加法器。

verilog设计十进制计数器(含进位位)

verilog设计十进制计数器(含进位位)

verilog设计⼗进制计数器(含进位位)⼗进制计数器:设计要求:1、每当计数器值为4’b001时,⾃动回到4’b00002、每个时钟沿计数器值加13、进位输出carry应该与4'b1001同周期输出4、异步复位module cnt10 ( clk, rst_n, carry, cnt );input clk, rst_n;output carry;output [3:0] cnt;reg carry;reg [3:0] cnt;always @( posedge clk or negedge rst_n )beginif ( ~rst_n )begincnt <= 4'b0000;endelse if ( cnt == 4'b1001 )begincnt <= 4'b0000;endelsebegincnt <= cnt + 4'b0001;endendalways @(posedge clk or negedge rst_n)beginif(!rst_n)begincarry <= 1'b0;endelse if(cnt == 4'b1000)begincarry <= 1'b1;endelsecarry<= 1'b0;endendmoduleView Code测试程序:`timescale 1ns/1psmodule cnt10_tb();reg clk, rst_n;wire carry;wire [3:0] cnt;always #10 clk = ~clk;cnt10 cnt10_tb(.clk(clk),.rst_n(rst_n),.carry(carry),.cnt(cnt));initialbeginclk = 1'b0;rst_n = 1'b1;#10 rst_n = 1'b0;#10 rst_n = 1'b1;endendmodule波形图:在这个⼗进制计数器中,唯⼀要注意的⼀点就是进位位carry变化的时刻,如果是为了使下⼀级能正确接收到前⼀级的进位位标识,要在计数到九时使进位位有效;如上图波形所⽰。

电子实验报告用d触发器做十进制计数器

电子实验报告用d触发器做十进制计数器

1.实验内容用D触发器设计一个同步十进制计数器2.实验器材编号器材型号个数1 二输入与门74LS08 12 三输入与门74LS11 13 二输入或非门74LS02 14 三输入或非门74LS10 15 D触发器74LS74 26 导线若干7 LED灯 48 电阻(200Ω) 13.实验原理计数器实际上是对时钟脉冲进行计数,每来一个脉冲,计数器状态改变一次。

8421 BCD码十进制加计数器在每个时钟脉冲作用下,触发器输出编码值加1,编码顺序与8421 BCD码一样,每个时钟脉冲完成一个计数周期。

由于电路的状态数、状态转换关系及状态编码都是明确的,因此设计过程较简单。

4.实验过程1)列出状态表十进制计数器共有十个状态,需要4个D触发器构成,其状态表1-1所示。

表1-18421 BCD码同步十进制加计数器的状态表计数脉冲CP的顺序状态状态(激励信号)Q3 Q2 Q1 Q0 Q3(D3)Q2(D2)Q1(D1)Q3(0D0)0 1 2 3 4 5 6 7 0 0 0 00 0 0 10 0 1 00 0 1 10 1 0 00 1 0 10 1 1 00 1 1 10 0 0 10 0 1 00 0 1 10 1 0 00 1 0 10 1 1 00 1 1 11 0 0 08 9 0 0 0 01 0 0 110 0 10 0 0 0(2)确定激励方程组按表1-1可画出触发器激励信号的卡诺图,如图1-1所示。

4个触发器组合16个状态(0000 ~ 1111),其中有6个转台(1010 ~ 1111)在8421 BCD码十进制计数器中是无效状态,在图1-1所示的卡诺图中以无关项×表示。

于是,得到激励方程组:图1-1 卡诺图(3)画出逻辑图,并且检查自启动能力检查激励方程组可画出逻辑图,如图1-2所示。

图中,各触发器的直接置0端为之地电平有效,如果系统没有复位信号,电路的RESET输入端应保持为高电平计数器能够正常工作。

三位十进制计数器

三位十进制计数器

数电课程设计说明书题目三位十进制计数器的设计系(部) 电子与通信工程系专业(班级) 光电信息工程学号指导教师起止日期6月11日至6月15日目录摘要2关键词2一、设计容21、设计要求与设计参数:22、容要求:2二、设计任务:2三、设计原理21、芯片介绍2(1)74ls192芯片2(2)555芯片3(3)三段稳压器(LM7805)42、三位十进制计数器的工作原理53、+5V直流电源的工作原理5四、仿真图51、MultiSim仿真图5(1)三位十进制减计数器5(2)四位十进制加计数器6(3)+5V直流电源72、Protel绘制原理图7(1)三位十进制计数器7(2)+5V直流电源7五、心得体会8参考文献8三位十进制计数器设计摘要: 本次课程设计的题目是三位十进制计数器的设计。

就设计三位十进制计数器方案而言,主要选取了3个74ls192芯片、1个555芯片与若干电容电阻。

74ls192芯片是双时钟方式的十进制可逆计数器,这就使得设计电路复杂不起来。

本设计采用555芯片意在实现一个脉冲发生器,为计数器提供一个脉冲。

然后再对其设计方案进行Multisim仿真,测试和分析电路图性能,并采用Protel 绘制原理图、设计PCB板。

本次设计的计数器是三位的十进制加计数器,由上升沿触发,通过CO 输出与其他芯片进行级联。

由于设计补充要求设计一个+5V的直流电源,本设计中的直流电源主要是运用了模电知识来设计的,其中采用了变压器、三段稳压器、220V的交流输入电源等器材。

设计最后补充完成了计数器的真值表和扩展了计数器的位数。

关键词:三位十进制计数器、74ls192芯片、555芯片、+5V的直流电源、Multisim仿真、Protel绘制原理图,真值表。

一、设计容1、设计要求与设计参数:1)设计一个能计0—999的三位十进制计数器。

(2)要求用数码管显示。

基本部分:设计制作一个能显示三位的十进制计数器,熟悉计数器的基本原理,电路的连线要求采用直线连接和总线连接两种方式,补充完成LED显示条对应的真值表,并完成直流电源5V的设计。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

十进制计数器设计
一、实验目的:熟悉Quartus II的Verilog文本设计流程全过程,学习十进制计数器的设计、仿真,掌握计数器的工作原理。

二、实验原理:计数器属于时序电路的范畴,其应用十分普遍。

该程序设计是要实现带有异步复位、同步计数使能和可预置型的十进制计数器。

该计数器具有5个输入端口(CLK、RST、EN、LOAD、DATA)。

CLK输入时钟信号;RST起异步复位作用,RST=0,复位;EN是时钟使能,EN=1,允许加载或计数;LOAD是数据加载控制,LOAD=0,向内部寄存器加载数据;DATA是4位并行加载的数据。

有两个输出端口(DOUT和COUT)。

DOUT 的位宽为4,输出计数值,从0到9;COUT是输出进位标志,位宽为1,每当DOUT为9时输出一个高电平脉冲。

RST在任意时刻有效时,如CLK非上升沿时,计数也能即刻清0;当EN=1,且在时钟CLK的上升沿时刻LOAD=0,4位输入数据DA TA被加载,但如果此时时钟没有上升沿,尽管出现了加载信号LOAD=0,依然未出现加载情况;当EN=1,RST=1,LOAD=1时,计数正常进行,在计数数据等于9时进行输出高电平。

三、实验任务:在Quartus II上将设计好的程序进行编辑、编译、综合、适配、仿真,从时序仿真图中学习计数器工作原理,了解计数器的运行情况及时钟输入至计数器数据输出的延时情况。

四、实验步骤:
(一)、建立工作库文件和编辑设计文件
任何一项设计都是一项Project(工程),而把一个工程下的所有文件放在一个文件夹内是一个非常好的习惯,以便于我们整理,利用和提取不同工程下的文件,而此文件夹将被EDA软件默认为Work Library(工作库),所以第一步先根据自己的习惯,建立个新的文件夹。

(1)新建文件夹:在盘建立并保存工程,将文件夹取名Jishuqi。

(2)输入源程序:打开Quartus II,选择菜单File→New→Design Files→VerilogHDL File→OK(如图1所示)。

图1
在空白处工作框处输入任务要求中的代码,代码如下:
module CNT10 (CLK,RST,EN,LOAD,COUT,DOUT,DATA);
input CLK, EN, RST,LOAD;
input [3:0] DATA;
output [3:0] DOUT;
output COUT;
reg [3:0] Q1;
reg COUT;
assign DOUT = Q1;
always @ (posedge CLK or negedge RST)begin
if(!RST) Q1 <= 0;
else if(EN)begin
if(!LOAD) Q1 <= DA TA;
else if(Q1<9) Q1 <= Q1+1;
else Q1 <= 4'b0000;end
end
always @ (Q1)
if(Q1==4'h9) COUT = 1'b1;
else COUT = 1'b0;
endmodule
(3)保存文件:选择File Save as,选择保存路径,即刚才新建文件夹Jishuqi,文件名应与实体名保持一致,即CNT10,点击保存后会跳出“Do you want to create a new project with this file?”选择“是”,则进入如下界面,如图2所示。

图2
点击Next,进入“工程设置”对话框,第一行表示工程所在的文件夹,第二行为工程名,可以与顶层文件的实体名保持一致,也可以另取别的名字,第三行为当前工程顶层文件的实体名,如图3所示。

图3
点击Next,进入ADD FILE对话框,单击Add All 按钮,将工程相关的所有Verilog文件加进工程,也可以单击“Add...”选择性加入,从工程目录中选出相关的Verilog文件,然后点击Next,当先直接建立工程时,需要自己添加,如图4所示。

图4
(4)选择目标芯片:我们选用的是CycloneIII系列的EP3C55F484C8,在Family栏选择芯片系列——CycloneIII,在窗口右边的三个下拉列表框选择过滤条件,分别选择Package为FBGA、Pin count为484和Speed grade为8,点击Next,如图5所示。

图5
(5)工具设置:进入EDA工具设置窗口,有三个选项,分别是选择输入的HDL类型和综合工具、选择仿真工具、选择时序分析工具,这是除Quartus II自含的所有设计工具以外的外加的工具,如果不作选择的,表示仅选择Quartus II自含的所有设计工具,本次不需要其他的设计工具,可以直接点击Next,如图6所示。

图6
(6)结束设置:进入“工程设置统计”窗口,列出了与此工程相关的设置情况,设置完成,点击Finish,如图7所示。

图7
(二)、编译
配置好后就可以进行编译了,点击Processing Start Compilation命令,启动全程编译
编译成功后的界面如图8所示。

图8
(三)、时序仿真
(1)打开波形编辑器:File→New→Verification/Debugging Files→Vector Waveform→OK,即出现空白的波形编辑器,如图9所示。

图9
(2)设置仿真时间区域:Edit-->End Time在Time栏中输入50,单位选择“us”,点击确定并保存波形文件,如图10所示。

图10
(3)点击Edit→Insert→Insert Node or Bus→Node Finder→List→ >>→OK,如图11所示。

图11
(4)编辑输入波形:
首先进行时钟窗口设置:点击左边的输入CLK的周期为2.56us,50%的占空比,如图12所示,设置EN、RST与LOAD,将它们设置为高电平。

图12
接着进行总线数据格式设置和参数设置:点击输入数据信号DA TA的左边的+号,能展开此总线中的所有信号;如果双击此+号左边的信号标记,将弹出对该信号数据格式设置的Node Properties对话框,在该对话框的Radix下拉列表中有四种选择,这里选择十进制表达方式。

其次输入波形数据:由于DATA是4位待加载的输入数据,需要设置输入数据。

用鼠标在
所示信号名DATA的某一数据区拖拉出来一块蓝色区域,然后单击左侧工具栏的按钮,
在弹出窗口输入数据如1,继而在不同区域设置不同数据。

这里为方便观察,输入的数据依次是1,5,7,9,4,如图13所示。

图13
(5)仿真
仿真器参数仿真:选择Assignment→Settings命令,在Settings窗口下选择Category→Simulator Settings。

在右侧的Simulation mode下拉列表中选择Timing,即选择时序仿真,并选择仿真激励文件名CNT10.vwf。

选择Simulation Period栏,确认选中了“Run simulation until all vector stimuli are used”,如图14所示。

图14
启动仿真器:Processing→Start Simulation,直至出现Simulation was successful,仿真结束,然后会自动弹出“Simulation Report”,点击输出信号“DOUT”旁边的“+”,展开总线中的所有信号,可以便于我们观察和分析波形,如图15所示。

图15
(四)应用RTL电路图观察器
Tools→Netlist Viewers→RTL Viewer,结果如图16所示。

图16
五、实验心得
通过几周的学习,我了解了FPGA编程语言的使用方法,通过设计实验项目,我掌握了Quartus II软件的用法以及十进制计数器的工作原理。

在这个过程中,让我明白了动手能力的重要性,同时也使我认识到自己所学的知识还很欠缺,要加强这方面的学习。

相关文档
最新文档