VHDL学习记录

这篇博客介绍了如何使用VHDL语言设计60进制计数器,通过解析60进制计数器的工作原理,提出了两种实现思路,并选择了其中一个(高位计数器的时钟连着低位计数器的进位信号)进行详细讲解。作者使用10进制和6进制计数器组合实现,展示了VHDL代码,并强调了VHDL在硬件描述语言中的优势和不同实现方式。
摘要由CSDN通过智能技术生成

VHDL全名Very-High-Speed Integrated Circuit Hardware Description Language ,是一种标准硬件描述语言。下面通过60进制计数器来分析VHDL的语法,以及一些硬件设计的理解。
60进制计数器,顾名思义,是每60个时间单位输出一个脉冲信号。60进制可以利用小于60进制的计数器的累加来达成相应的功能。主要有以下两种思路:
一种是直接其中的一个计数器通过时钟型号累加,另一个则是接受第一个计数器的进位信号,而进行加法计数。他们共用一个时钟信号,为并行进位。
一种是高位计数器的时钟连着低位计数器的进位信号,从而进行增加。
这里取第二种思路,通过一个10进制的计数器和一个6进制的计数器来实现60进制计数器。

顶层图如下
这里写图片描述
下面我们用VHDL语言来实现。

首先是6进制计数器。
注意!!器件最好不要以数字作为开头

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

这部分是库的声明。1164库中包括了大部分标准的类型,器件。
而unsigned中则包括了如加法等器件。

entity counter_6 is
port(
clk,clrn,en:in std_logic;
dout:out std_logic_vector (3 downto 0);
cout:out std_logic);
end counter_6;

这部分为这个文件所描述的总器件端口的声明,类似编程中主函数的声明。

architecture counter_6_arch of counter_6 is

这下面就是器件内部的描述内容、类似编程中的主函数实现。

signal douti:std_logic_vector (3 downto 0);
begin
    process(en,clk,clrn,en)
    begin
        if clrn = '0' then
   
分频器是一种常见的电路,能够将输入时钟信号分频为一个小于1的分VHDL硬件描述语言,可以用于设计字电路。下面是一个小分频器的VHDL实现。 ```vhdl library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity Fractional_Divider is Port ( CLK_IN : in STD_LOGIC; CLK_OUT : out STD_LOGIC; EN : in STD_LOGIC; RST : in STD_LOGIC; N : in UNSIGNED(9 downto 0); D : in UNSIGNED(9 downto 0)); end Fractional_Divider; architecture Behavioral of Fractional_Divider is signal counter : UNSIGNED(9 downto 0) := (others => '0'); signal div : UNSIGNED(19 downto 0) := (others => '0'); signal clk_div : STD_LOGIC := '0'; begin process (CLK_IN, RST) begin if (RST = '1') then counter <= (others => '0'); div <= (others => '0'); clk_div <= '0'; elsif rising_edge(CLK_IN) then if (EN = '1') then counter <= counter + 1; if (counter = (D - 1)) then counter <= (others => '0'); div <= div + N; clk_div <= not clk_div; end if; end if; end if; end process; CLK_OUT <= clk_div; end Behavioral; ``` 这个小分频器的输入是一个时钟信号`CLK_IN`,还有一个使能信号`EN`和复位信号`RST`。输出是分频后的时钟信号`CLK_OUT`。`N`和`D`分别是分子和分母,用于计算分。 在`process`中,首先根据复位信号清空计器和除寄存器以及分频后的时钟信号。然后在时钟上升沿触发时,如果使能信号为1,则将计器加1。当计器计到D-1时,说明经过了D个时钟周期,需要对除寄存器加上分N,并将计器清零。同时,分频后的时钟信号取反。 最后将分频后的时钟信号赋值给输出端口`CLK_OUT`即可。 这是一个简单的小分频器的VHDL实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值