--首先贴出源代码
--本文可以直接复制粘贴,
--然后实现一个48分频的分频器。
--但是,注意文件名必须为divider48.vhd
----文件名divider48.vhd---------------
---第一部分是类似C++的#include。。之类的话
--建议查询下任何一本具有系统性的
--VHDL语言的教程,都可以知道这一部分的作用。
LIBRARY ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
----第二部分定义了分频器的实体--------
--实体名为divider48,
--必须和文件名保持一致
--端口为clk48_in,clk48_out
--VHDL语言不区分大小写
--------------------------------------
ENTITY divider48 IS
PORT (
clk48_in:INstd_logic;
clk48_out:OUTstd_logic
--注意这里没有分号
);
END divider48;
--第三部分为ARCHITECTURE,
--本人才疏学浅,现在只知道:
--在ARCHITECTURE中可以:
--1,定义PROCESS
--2,定义COMPONENT,然后连接
ARCHITECTURE behave OF divider48 IS
--behave这个名字可以改。
--divider48不能改。
SUBTYPE SHTINT IS INTEGER RANGE 0 TO 65535;
--定义子类型,为了节约数据空间
CONSTANT DIVIDE_PERIOD: shtINT:=48;
--VHDL语言不区分SHTINT和shtINT,
--理由前面已经说过
--此外,shtINT后面是分频周期,可以修改
BEGIN
PROCESS (clk48_in) IS
--PORCESS有一个敏感列表。
VARIABLE cnt:SHTINT;
BEGIN
if rising_edge(clk48_in)then
--每次clk48_in的上升沿到来的时候
if(cnt <= (divide_period/2)) then
clk48_out<='1';
cnt:=cnt+1;
elsif(cnt<(divide_period-1)) then
clk48_out<='0';
cnt:=cnt+1;
else
cnt:=0;
end if;
--个人认为,VHDL语言的elsif是
--一个很容易造成混乱的语句,
--不知是否等于else if
end if;
END PROCESS;
END ARCHITECTURE behave;