VHDL硬件描述语言(六)VHDL案例

这篇具有很好参考价值的文章主要介绍了VHDL硬件描述语言(六)VHDL案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、常见电路

1、 分频电路

 1)二分频电路

library ieee;
use ieee.std_logic_1164.all;
entity example is
 port(clock : in std_logic;
        clkout : out std_logic
      );
end example;

architecture behave of example is
 signal clk: std_logic;
 begin
  process(clock)
   begin
     if rising_edge(clock) then
        clk<=not clk;
     end if;
  end process;
  clkout<=clk;
end behave;


 2)偶数倍分频电路(8分频)

library ieee;
use ieee.std_logic_1164.all;

entity FreDevider is
port
    (clkin : in std_logic;
     clkout : out std_logic
     );
end;

architecture Devider of FreDevider is
constant N :integer := 3;
signal counter : integer range 0 to N;
signal clk : std_logic;
begin
    process(clkin)
    begin
        if rising_edge(clkin) then
            if counter=N then
                counter<=0;
                clk<=not clk;
            else
                counter<=counter+1;
            end if;
        end if;
    end process
    clout<=clk;
end;

3) 奇数倍分频(3分频)

library ieee;
use ieee.std_logic_1164.all;

entity Fredevider3 is
port
        (clkin : in std_logic;
         clkout : out std_logic
        );
end;

architecture Devider of Fredevider3 is
signal counter :integer range 0 to 2;
signal temp1,temp2 : std_logic;
begin
    process(clkin)
    begin
        if rising_edge(clkin) then
            if counter=2 then
                counter<=0;
                temp1<=not temp1;
            else
                counter<=counter+1;
            end if;
        end if;

        if falling_edge(clkin) then
            if counter=1 then
                temp2<=not temp2;
            end if;
        end if;
    end process;
    clkout<=temp1 xor temp2;
end;

2、计数器

library ieee;
use ieee.std_logic_1164.all;

entity example is
 port(clk : in std_logic;
        reset : in std_logic;
        num : buffer integer range 0 to 3
      );
end example;

architecture behave of example is
 begin
  process(clk)
   begin
     if reset='1' then
        num<=0;
     elsif rising_edge(clk) then
        if num=3 then
            num<=0;
        else
            num<=num+1;
        end if;
     end if;
  end process;
end behave;

3、简单并-串转换

library ieee;
use ieee.std_logic_1164.all;

entity example is
 port(clk : in std_logic;
        reset : in std_logic;
        parallelnum : in std_logic_vector(31 downto 0);
        serialout :out std_logic
      );
end example;

architecture behave of example is
 begin
  process(clk)
  variable i :integer range 0 to 31;
   begin
     if reset='1' then
        i:=0;
     elsif rising_edge(clk) then
        serialout<=parallelnum(i);
        
        if i<31 then
            i:=i+1;
        end if;
        
     end if;
  end process;
end behave;

4、时钟产生

(1)方法1

process
begin
    clk <= not clk;
    wait for 10ns;
end process;

(2)方法2

process
begin
    clk <= not clk after 10ns;
    wait on clk;
end process;

(3)方法3

process(clk)
begin
    clk <= not clk after 10ns;
end process;

(4)方法4

clk <= not clk after 10ns;

5、七段数码管驱动电路

VHDL硬件描述语言(六)VHDL案例

1111110 0
0110000 1
1101101 2
1111001 3
0110011 4
1011011 5
1011111 6
1110000 7
1111111

8

1111011 9
library ieee;
use ieee.std_logic_1164.all;

entity example is
port(num : in integer range 0 to 15;
     display : out std_logic_vector(6 downto 0)
    );
end;

architecture behave of example is
begin
    with num select
        display<="1111110" when 0,
                 "0110000" when 1,
                 "1101101" when 2,
                 "1111001" when 3,
                 "0110011" when 4,
                 "1011011" when 5,
                 "1011111" when 6,
                 "1110000" when 7,
                 "1111111" when 8,
                 "1111011" when 9,
                 "0000000" when others;
end

6、同步整形电路

(1)上升沿输出脉冲信号

library ieee;
use ieee.std_logic_1164.all;

entity SignalLatch is
port(clk : in std_logic;
     signalin : in std_logic;
     signalout : out std_logic
    );
end;

architecture Dataflow of SignalLatch is
signal q0,q1 : std_logic;
begin
    process(clk)
    begin
        if rising_edge(clk) then
            q0<=signalin;
            q1<=q0;
        end if;
    end process;
    signalout<=q0 and (not q1);
end;

(2)下降沿处输出脉冲信号

library ieee;
use ieee.std_logic_1164.all;

entity SignalLatch is
port(clk : in std_logic;
     signalin : in std_logic;
     signalout : out std_logic
    );
end;

architecture Dataflow of SignalLatch is
signal clear,s : std_logic;
begin
    process(signalin)
    begin
        if clear='1' then
            s<='0';
        elsif rising_edge(signalin) then
            s<='1';
        end if;
    end process;


    process(clk)
    begin
        if falling_edge(clk) then
            if s='1' then
                signalout<='1';
                clear<='1';
            else
                signalout<='0';
                clear<='0';
            end if;
        end if;
    end process;
end;

7、键盘扫描

VHDL硬件描述语言(六)VHDL案例文章来源地址https://www.toymoban.com/news/detail-508882.html

列/PC3~PC0(输出) 行/PC7~PC4(输入) 按键
0111 1110 0
0111 1101 1
0111 1011 2
0111 0111 3
1011 1110 4
1011 1101 5
1011 1011 6
1011 0111 7
1101 1110 8
1101 1101 9
1101 1011 A
1101 0111 B
1110 1110 C
1110 1101 D
1110 1011 E
1110 0111 F
library ieee;
use ieee.std_logic_1164.all;

entity Keyboard is
port
(
    clk : in std_logic;
    kin : in std_logic_vector(0 to 3);
    scansignal : out std_logic_vector(0 to 3);
    num : out integer range 0 to 15
);
end;

architecture scan of Keyboard is
signal scans : std_logic_vector(0 to 7);
signal scn : std_logic_vector(0 to 3);
signal counter : integer range 0 to 3;
signal counterB : integer range 0 to 3;
begin
    process(clk)
    begin
        if rising_edge(clk) then
            if counter=3 then
                counter<=0;
            else
                counter<=counter+1;
            end if;
                case counter is            --产生扫描信号
                when 0 =>scn<="1000";
                when 1 =>scn<="0100";
                when 2 =>scn<="0010";
                when 3 =>scn<="0001";
            end case;
        end if;
    end process;

    pocess(clk)
    begin
        if falling_edge(clk) then          --上升沿产生扫描信号,下降沿读入行码
            if kin="0000" then             --“0000”表示无按下
                if counterB=3 then
                    num<=15;                --15为无效值
                    counterB<=0;
                else
                    counterB<=counterB+1;
                end if;
            else
                counterB<=0;
                case scans is
                    when "10000001"=>num<=0;                    
                    when "10000010"=>num<=1;
                    when "10000100"=>num<=2;                    
                    when "10001000"=>num<=3;
                    when "01000001"=>num<=4;                    
                    when "01000010"=>num<=5;
                    when "01000100"=>num<=6;                    
                    when "01001000"=>num<=7;
                    when "00100001"=>num<=8;                    
                    when "00100010"=>num<=9;
                    when "00100100"=>num<=10;                    
                    when "00101000"=>num<=11;
                    when "00010001"=>num<=12;                    
                    when "00010010"=>num<=13;
                    when "00010100"=>num<=14;                    
                    when others=>num<=num;
                end case;
            end if;
        end if;
    end process;
    scans<=scn&kin;
    scansignal<=scn;
end;
         


8、键盘消抖电路

library ieee;
use ieee.std_logic_1164.all;

entity Antitwitter is
port( clk : in std_logic;
      numin : in integer range 0 to 15;
      numout : out integer range 0 to 15);
end;

architecture Behavior of Antitwitter is
signal tempnum integer range 0 to 15;
signal counter : integer range 0 to 31;
signal start : std_logic;
begin
    process(clk)
    begin
        if rising_edge(clk) then 
            if start='0' then
                tempnum<=15;
                numout<=15;
                start<='1'
            else
                if numin /= tempnum then
                    tempnum<=numin;
                    counter<=0;
                else
                    if counter=31 then
                        numout<=numin;
                        counter<=0;
                    else
                        counter<=counter+1;
                    end if;
                end if;
            end if;
        end if;
    end process;
end;

到了这里,关于VHDL硬件描述语言(六)VHDL案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 硬件描述语言(HDL)基础——运算符

    任务描述 本关任务:采用硬件描述语言对输入信号a和b进行按位或(out_or_bitwise)和逻辑或(out_or_logical)运算。此外,再将a和b按位取反,其中a取反后的结果作为out_not的低半部分,b取反后的结果作为out_not的高半部分。 知识点 为了完成本关任务,需要掌握的知识点如下: 位运

    2023年04月13日
    浏览(28)
  • 【学习笔记】2、逻辑代数与硬件描述语言基础

    基本定律 或 “+” 与 “·” 非 “—” 0-1律 A+0=A A+1=1 A+A=A A+ A ‾ overline{A} A =1(互补律) A·0=0 A·1=A A·A=A A· A ‾ overline{A} A =0 A ‾ ‾ overline{overline{A}} A =A 结合律 (A+B)+C = A+(B+C) (AB)C=A(BC)=ABC 交换律 A+B = B+A AB=BA 分配律 A(B+C) = AB+AC A+BC = (A+B)(A+C) 反演律(摩根定理) A ⋅ B ⋅ C ⋅

    2024年01月16日
    浏览(36)
  • 04|硬件语言筑基(二)-代码是怎么生成具体电路的?

    你好,我是LMOS。 上节课,我们学习了硬件描述语言Verilog的基础知识。今天我会带你一起用Verilog设计一个简单的电路模块。通过这节课,你不但能复习巩固上节课学到的硬件语言知识,还能在动手实践中体会代码是怎么生成具体电路的。 如果你学过计算机组成原理的课程或

    2024年02月08日
    浏览(24)
  • 使用 VHDL、Verilog、SystemVerilog、SystemC、HLS(C++、OpenCL)进行数字硬件建模

    目录 引言 1. 数字硬件建模概述 1.1 硬件描述语言 1.2 系统级建模语言

    2024年02月08日
    浏览(77)
  • Verilog的三种描述方式(结构化描述、数据流描述、行为级描述对电路功能的描述有三种方式:结构化描述、数据流描述、行为级描述

    Verilog的三种描述方式(结构化描述、数据流描述、行为级描述对电路功能的描述有三种方式:结构化描述、数据流描述、行为级描述。三种描述方式抽象级别不同,各有优缺点,相辅相成,需要配合使用。 目录 一、结构化描述 1、概念 2、特点 3、示例 真值表: 电路抽象:

    2024年02月04日
    浏览(55)
  • 基于硬件隔离增强risc-v调试安全1_问题描述

    安全之安全(security²)博客目录导读 2023 RISC-V中国峰会 安全相关议题汇总 说明:本文参考RISC-V 2023中国峰会如下议题,版权归原作者所有。   /

    2024年02月10日
    浏览(28)
  • 什么是VHDL?一文带你了解VHDL语言

    基于FPGA的SOC在嵌入式系统应用越来越广了,比较流行的硬件描述语言有两种Verilog HDL/VHDL,均为IEEE标准。VHDL如果有C语言基础的话就会比较容易上手。而VHDL语言则需要Ada编程基础。另外VHDL语言具有大量成熟的模块,从某种角度说VHDL更具生命力。 VHDL 的历史 VHDL 的 英 文 全 名

    2024年02月05日
    浏览(36)
  • 嵌入式硬件电路原理图之跟随电路

    描述 电压跟随电路 电压跟随器是共集电极电路,信号从基极输入,射极输出,故又称射极输出器。基极电压与集电极电压相位相同,即输入电压与输出电压同相。这一电路的主要特点是:高输入电阻、低输出电阻、电压增益近似为1,所以叫做电压跟随器。 电压跟随器电路

    2024年02月04日
    浏览(40)
  • 硬件电路设计----DC-DC电路

    文章目录 一、 概念及特点 二、分类 三、设计技巧及主要技术参数选用要求 四、器件选型一般原则 五、 外围器件选择的要求 六 、PCB设计要求 大家好,我是致力于在硬件设计创出一片天地的新手小白:陌白 电子产品中,总是可见DC-DC的身影,今天分享DC-DC的相关知识点。

    2024年02月09日
    浏览(33)
  • 数字电路硬件设计系列(十七)之上电时序控制电路

    上电时序,也叫做Power-up Sequence,是指电源时序关系。 下面 就是一系列电源的上电的先后关系: 采用不同的电容来控制上电延时时间的长短,具体的电路见下图: 这种上电时序控制的方式, 电路结构简单 ,但是 延时时间难以精确的控制 。 在FPGA的电源时序控制中,应用十

    2024年02月12日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包