
LIBRARY IEEE;
USE IEEESTD_LOGIC_1164ALL;
USE IEEESTD_LOGIC_ARITHALL;
USE IEEESTD_LOGIC_UNSIGNEDALL;
ENTITY fq_divider IS
generic(n:integer:=60000);
PORT(
CLK,reset: IN STD_LOGIC;
CLK_OUT:buffer STD_LOGIC
);
END;
ARCHITECTURE A OF fq_divider IS
SIGNAL CNT1,CNT2:integer:=0;
SIGNAL OUTTEMP:STD_LOGIC;
SIGNAL LOUT:STD_LOGIC;
SIGNAL OUT3:STD_LOGIC:='0';
BEGIN
P1: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 P1;
P2: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 P2;
P3: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 P3;
P4:PROCESS(OUTTEMP,clk,reset)
BEGIN
if reset='0' then
clk_out<=clk;
elsif ((n/=2) and (n/=1)) then
IF OUTTEMP'EVENT AND OUTTEMP='1' THEN
CLK_OUT<=NOT CLK_OUT;
END IF;
elsif (n=2) then
if(clk'event and clk='1')then
clk_out<=not clk_out;
end if;
else
clk_out<=clk;
end if;
END PROCESS P4;
END A;
已经仿真过,请放心使用!
library IEEE;
use IEEEstd_logic_1164all;
use IEEEstd_logic_unsignedall;
entity Ctl_CNT is
port (
clk: in STD_LOGIC;
back: in STD_LOGIC;
clr: in STD_LOGIC;
rst: in STD_LOGIC;
dis_h: out STD_LOGIC_VECTOR (6 downto 0);
dis_l: out STD_LOGIC_VECTOR (6 downto 0)
);
end Ctl_CNT;
architecture Ctl_CNT_arch of Ctl_CNT is
signal qh:std_logic_vector(3 downto 0);
signal ql: std_logic_vector(3 downto 0);
begin
p1: process(back,rst,clr,clk)
begin
if clr'event and clr='1' then
qh<="0000";
ql<="0000";
elsif
rst'event and rst='1' then
qh<="0110";
ql<="0110";
elsif
clk'event and clk='1'then
if back'event and back='1' then
if ql="0000" then
if qh="0000"
then ql<="1001" ;qh<="1001";
else
qh<=qh-'1';
end if;
else
ql<=ql-'1' ;
end if ;
else
if ql="1001" then
if qh="1001"
then ql<="0000" ;qh<="0000";
else
qh<=qh+'1';
end if;
else
ql<=ql+'1';
end if ;
end if;
end if;
end process p1;
p2:process(qh,ql)
begin
case qh is
when"0000"=> dis_h<="0111111";
when"0001"=> dis_h<="0000110";
when"0010"=> dis_h<="1011011";
when"0011"=> dis_h<="1001111";
when"0100"=> dis_h<="1100110";
when"0101"=> dis_h<="1101101";
when"0110"=> dis_h<="1111101";
when"0111"=> dis_h<="0000111";
when"1000"=>dis_h<="1111111";
when"1001"=> dis_h<="1101111";
when others=>dis_h<="0000000";
end case;
case ql is
when"0000"=> dis_l<="0111111";
when"0001"=> dis_l<="0000110";
when"0010"=> dis_l<="1011011";
when"0011"=> dis_l<="1001111";
when"0100"=> dis_l<="1100110";
when"0101"=> dis_l<="1101101";
when"0110"=> dis_l<="1111101";
when"0111"=>dis_l<="0000111";
when"1000"=> dis_l<="1111111";
when"1001"=> dis_l<="1101111";
when others=> dis_l<="0000000";
end case;
end process p2;
end Ctl_CNT_arch;
模N计数器的实现
一般设计中用到计数器时,我们可以调用lpm库中的计数器模块,也可以采用VHDL语言自己设计一个模N计数器。本设计采用VHDL语言设计一个最大模值为16的计数器。输入端口为:使能信号en,复位信号clr和时钟信号clk;输出端口为:qa、qb、qc、qd。其VHDL语言描述略。
带使能控制的异或门的实现
输入端为:xor_en:异或使能,a和b:异或输入;输出端为:c:异或输出。当xor_en为高电平时,c输出a和b的异或值。当xor_en为低电平时,c输出信号b。其VHDL语言略。
2分频(触发器)的实现
输入端为:时钟信号clk,输入信号d;输出端为:q:输出信号a,q1:输出信号a反。其VHDL语言略。
4分频器的实现
本设计采用层次化的设计方法,首先设计实现分频器电路中各组成电路元件,然后通过元件例化的方法,调用各元件,实现整个分频器。其VHDL语言略。
计算机组成原理是计算机科学与技术学科的支柱,也是计算机专业的最重要的基础教育之一。在计算机组成原理和数字电路实验中使用VHDL语言的最大优势在于其强大的描述能力,与其他描述语言相比具有诸多优势。
VHDL语言为学生提供了概念化和设计环境的能力,交替使用不同的算法来编译电路的运行,并根据编写的代码自行进行各种模拟和测试,以使编译达到最佳效果。
这样的实验过程更能激发学生的学习兴趣和实践兴趣,进一步提高学生的实践能力和创新能力。作为一名计算机专业的大三学生,下面和大家分享一些VHDL的知识。
—— 欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)