怎样把50MHZ分频为100HZ和1KHZ的VHDL语言的程序设计

怎样把50MHZ分频为100HZ和1KHZ的VHDL语言的程序设计,第1张

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的知识

——

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9426231.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)