一.计数器
实验设计方案
1.原理:计数器是数字系统中常用的一种可统计时钟的个数的时序逻辑部件。计数器中的“数”是触发器的状态组合。某一种触发器状态组合代表某个“数”,即“编码”。计数器循环一次所包括的状态总数就是称作“容量”或“模”。在计数脉冲作用下,使状态逐个迁移成不同的状态组合来实现数的增加和减少。
2.VHDL代码:
(1)2选1多路选择器
library ieee;
use ieee.std_logic_11.all;
entity mux4_2_1 is
port(d0,d1:in std_logic_vector(3 downto 0);
sel:in std_logic_vector(1 downto 0);
dout:out std_logic_vector(3 downto 0));
end mux4_2_1;
architecture rtl of mux4_2_1 is
begin
dout<=d0 when sel="00"else
d1 when sel="01";
end rtl;
(2)十三进制计数器
library ieee;
use ieee.std_logic_11.all;
use ieee.std_logic_unsigned.all;
entity exp_cnt13 is
port( Clk,clrn,En:in std_logic;
cq:out std_logic_vector(3 downto 0);
cq1:out std_logic_vector(3 downto 0);
cout:out std_logic);
end exp_cnt13;
architecture bhv of exp_cnt13 is
signal cqi:std_logic_vector(3 downto 0);
signal cqi1:std_logic_vector(3 downto 0);
begin
process(En,Clk,clrn,cqi)
begin
if clrn='0' then
cqi<="0000";
elsif Clk'event and Clk='1' then
if En='1' then
if cqi<12 then
cqi<=cqi+1;
else
cqi<="0000";
end if;
end if;
end if;
if cqi=12 then
cout<='1';
else
cout<='0';
end if;
cq<=cqi;
if cqi>9 then
cq1<="0001";
cqi1<=cqi-10;
else
cq1<="0000";
cqi1<=cqi;
end if;
cq<=cqi1;
end process;
end bhv;
3.结构框图:
实验波形仿真
1波形图:
2操作说明:
设置网格为80ns,设置clk选低电平,为一个周期80ns的函数;把clrn设置为高电平;设置En选高电平; 设置cq为一个周期函数,根据数组在每段的值设置cq[0] 到cq[3]的值,然后仿真波形,看输出的cout的波形,通过下载到实验箱可以验证波形的正确性。
二.偶数次分频器
实验设计方案
1.原理:通过计数值来控制输出时钟的高电平和低电平的时间。占空比为50%的分频器的设计是,考虑计数到刚好一半状态时将输出电平进行一次翻转,并给计数器一个复位信号,如此循环。为了有限度的实现占空比可调,可以当计数器计数值未达到一半是将时钟输出为0(或1),剩余状态时钟输出1(或0);当计数器计数到N-1时,如此循环。
2.VHDL代码:
library ieee;
use ieee.std_logic_11.all;
entity exp_clkdiv10_1 is
generic(dwidth:integer:=10);
port(clkin:in std_logic;
clkout:out std_logic);
end exp_clkdiv10_1;
architecture rtl of exp_clkdiv10_1 is
signal temp:integer range dwidth-1 downto 0;
begin
process(clkin)
begin
if(clkin'event and clkin='1')then
if temp=9 then
temp<=0;
else
temp<=temp+1;
end if;
end if;
end process;
process(temp)
begin
if temp else clkout<='0'; end if; end process; end rtl; 实验波形仿真 1.波形图: 2.操作说明: 设置网格为100ns,设置clkin选低电平,为一个周期100ns的函数,然后仿真波形,看输出的clkcout的波形,通过下载到实验箱可以验证波形的正确性。 实验日志 1实验感想: 数码管下载是本门课的重难点,应该熟练的掌握;我对第一次的实验没能掌握好其中的原理,应该会灵活的掌握计数器和几选一多路选择器的代码并能根据需要进行修改。 2思考与练习: 1.计数器级联的方法有哪些? 答:同步联接法和异步联接法。 2.同步计数和异步计数的区别? 答:异步计数器的的每个触发器不是由同一个脉冲来控制的,同步计数器的每个触发器都是由同一个脉冲来控制的。 3,如何根据exp_cnt60.vhd代码绘出顶层电路图? 答:利用原件例化功能,即在exp_cnt60工程中,在exp_cnt60.vhd代码编译成功后,按File->create/update->create symbol flies for current file 4, 如何设计0.5次分频器? 答:设计一个模N的计数器,再设计一个脉冲扣除电路,每来两个脉冲扣除一个脉冲,即可实现分频系数为N-0.5的分频器。脉冲扣除电路由异或门和一个2分频器构成。本设计在半整数分频器原理的基础上,对异或门加一个使能控制信号,通过对异或门和计数器计数状态值的控制,实现同一个电路完成多种形式分频. 5. 偶数次分频器与奇数次分频器的vhdl设计主要区别? 答:偶数分频对时钟进行偶数分频比较简单,如占空比为50%的时钟信号只要使用一个计数器,在前半段时间内高电平后半段电平内低电平这样分频出来的信号就是占空比为50%的时钟信号。奇数分频相对偶数分频来说,如果不要求占空比的话是一样的,但是如果要求占空比为50%的话则计数分频必偶数分频要复杂些。其中需要使用些技巧。可以先对输入时钟的上升沿进行计数,然后让一个内部信号在前一半段时间内为低电平,后一半段时间内为高电平。同时对输入时钟的下降沿进行计数,让另一个内部信号在前半段时间内为高电平,在后半段时间内为低电平。然后让两个内部信号进行相与,得到了半个时钟的一个高电平,在让这个信号和第一个内部信号相或,就得到了占空比为50%的时钟信号了下载本文