📄 chufaqi.txt
字号:
时序电路是指它的输出不仅取决于当时的输入,而且也取决于过去的输入,即过去输入不同,则在当前的情况下,输出也可能不同。时序电路的基础电路是触发器,能够存储一位二制信号的基本单元电路统称为触发器,计算机中常用的时序电路有计数器,寄存器和节拍分配器。D触发器和JK触发器是构成时序逻辑电路最基本存储元件,为了实现记忆一位二值信号的功能,触发器必须具备以下两个特点:
1.具有两个能自行保持的稳定状态,用来表示逻辑状态的0和1,或二进制的0和1。
2.根据不同的输入信号可以置成1或0的状态。根据触发器的逻辑功能的不同分为RS触发器,JK触发器,T触发器和D触发器等[2]。
D触发器的VHDL语言描述
library ieee;
use ieee.std_logic_1164.all;
entity dffr is
port(clk,clr,d:in std_logic;
q,qb:out std_logic);
end dffr;
architecture rtl of dffr is
signal qin: std_logic;
begin
qb<=not qin;
q<=qin;
process(clk,clr)
begin
if clr='1' then
qin<='0';
elsif clk'event and clk='1' then
qin<=d;
end if;
end process;
end rtl;
5.4.4 JK触发器的VHDL语言描述
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity jk_ff is
port(j,k,clk:in std_logic;
q,qn:out std_logic);
end jk_ff;
architecture rtl of jk_ff is
signal q_temp,qn_temp:std_logic;
begin
process(clk,j,k)
begin
if clk'event and clk='0'then
if j='1'and k='0'then
q_temp<='1';
qn_temp<='0';
elsif j='0'and k='1'then
q_temp<='0';
qn_temp<='1';
elsif j='1' and k='1'then
q_temp<=not q_temp;
qn_temp<=not qn_temp;
else
q_temp<=q_temp;
qn_temp<=qn_temp;
end if;
end if;
q<=q_temp;
qn<=not q_temp;
end process;
end rtl;
5.4.5加/减脉冲控制器的顶层VHDL语言描述
程序如下[11]:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity idcount is
port(idclock,reset,inc,dec:in std_logic;
idout:out std_logic);
end idcount;
architecture behav of idcount is
component dffr
port(clk,clr,d:in std_logic;
q,qb:out std_logic);
end component;
component dffs
port(clk,clr,d:in std_logic;
q:out std_logic);
end component;
component dffb
port(clk,clr,d:in std_logic;
qb:out std_logic);
end component;
component jkffr
port(clk,clrn,j,k:in std_logic;
q,qn:out std_logic);
end component;
signal d7,d8,d9,d10,d11,d12:std_logic;
signal q1,qn1,q2,qn2,q3,qn3:std_logic;
signal q4,qn4,q5,q6:std_logic;
signal qn7,qn8,q9,qn9:std_logic;
begin
dffl:dffr port map(idclock,reset,inc,q1,qn1);
dff2:dffr port map(idclock,reset,dec,q2,qn2);
dff3:dffr port map(idclock,reset,q1,q3,qn3);
dff4:dffr port map(idclock,reset,q2,q4,qn4);
dff5:dffs port map(idclock,reset,q3,q5);
dff6:dffs port map(idclock,reset,q4,q6);
jk:jkffr port map (idclock,reset,qn7,qn8,q9,qn9);
d7<=q9 and qn1 and q3;
d8<=q9 and q5 and qn3;
d9<=d7 or d8;
d10<=qn9 and qn2 and q4;
d11<=qn9 and q6 and qn4;
d12<=d11 or d10;
dff7:dffb port map(idclock,reset,d9,qn7);
dff8:dffb port map (idclock,reset,d12,qn8);
idout<=(not idclock) or q9;
end behav;
5.4.6加/减脉冲控制器封装模块
5.4.7加/减脉冲控制器仿真波形
有图可见,当来一个INC脉冲时,输出相应的增加一个脉冲,而当来一个DEC脉冲时,则在输出相应的减少一个脉冲。
5.4.8 N分频器的VHDL语言描述
N分频器则是一个简单的除N 计数器。分频器对脉冲加减电路的输出脉冲再进行N分频,得到整个环路的输出信号Fout。同时,因为Fout = Clk/ 2 N = Fo ,因此通过改变分频值N 可以得到不同的环路中心频率Fo 。另外,模值N 的大小决定了DPLL 的鉴相灵敏度为π/ N 。以下描述以20分频为例。其VHDL语言描述如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity clkdiv is
generic(n:integer:=20);
port(clk: in std_logic;
clkout_3:buffer std_logic);
end clkdiv;
architecture a of clkdiv is
signal cnt1,cnt2:integer:=0;
signal outtemp : std_logic;
signal lout: std_logic;
signal out3:std_logic:='0';
begin
process(clk)
begin
if clk'event and clk='1'then
if cnt1=n-1 then
cnt1<=0;
else
cnt1<=cnt1+1;
end if;
end if;
end process;
process(clk)
begin
if clk'event and clk='0'then
if cnt2=n-1 then
cnt2<=0;
else
cnt2<=cnt2+1;
end if;
end if;
end process;
process(cnt1,cnt2 )
begin
if ((n mod 2)=1) then
if cnt1=1 then
if cnt2=0 then
outtemp<='1';
else outtemp<='0';
end if;
elsif cnt1=(n+1)/2 then
if cnt2=(n+1)/2 then outtemp<='1';
else outtemp<='0';
end if;
else outtemp<='0';
end if;
else
if cnt1=1 then
outtemp<='1';
elsif (cnt1=(n/2+1)) then
outtemp<='1';
else
outtemp<='0';
end if;
end if;
end process;
process(outtemp,clk)
begin
if ((n/=2) and (n/=1)) then
if outtemp'event and outtemp='1' then
clkout_3<=not clkout_3;
end if;
elsif (n=2) then
if(clk'event and clk='1')then
clkout_3<=not clkout_3;
end if;
else clkout_3<=clk;
end if;
end process;
end a;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -