VHDL
来源:互联网 发布:济宁网络推广哪家好 编辑:程序博客网 时间:2024/04/29 02:49
一. 四位加法计数器
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt4b is port ( clk : in std_logic; rst : in std_logic; ena : in std_logic; outy : out std_logic_vector(3 downto 0); cout : out std_logic ); end entity cnt4b;architecture behav of cnt4b is signal cqi :std_logic_vector(3 downto 0);begin process(clk,rst,ena) begin if rst ='1' then cqi <="0000"; elsif clk'event and clk ='1' then if ena='1' then cqi <= cqi+1; end if; end if; outy <=cqi; end process; cout <=cqi(0) and cqi(1) and cqi(2) and cqi(3);end architecture behav;
二. 七段译码器
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY DecL7s IS PORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0); LED7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0) );END ENTITY DecL7s;ARCHITECTURE one OF DecL7S ISBEGIN PROCESS(A) BEGIN CASE A(3 DOWNTO 0) IS WHEN "0000" => LED7S <= "0111111"; WHEN "0001" => LED7S <= "0000110"; WHEN "0010" => LED7S <= "1011011"; WHEN "0011" => LED7S <= "1001111"; WHEN "0100" => LED7S <= "1100110"; WHEN "0101" => LED7S <= "1101101"; WHEN "0110" => LED7S <= "1111101"; WHEN "0111" => LED7S <= "0000111"; WHEN "1000" => LED7S <= "1111111"; WHEN "1001" => LED7S <= "1101111"; WHEN "1010" => LED7S <= "1110111"; WHEN "1011" => LED7S <= "1111100"; WHEN "1100" => LED7S <= "0111001"; WHEN "1101" => LED7S <= "1011110"; WHEN "1110" => LED7S <= "1111001"; WHEN "1111" => LED7S <= "1110001"; WHEN OTHERS => NULL; END CASE; END PROCESS;END ARCHITECTURE one;
三. 寄存器
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY REG4B IS PORT ( LK : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END REG4B; ARCHITECTURE behav OF REG4B IS BEGIN PROCESS(LK, DIN) BEGIN IF LK'EVENT AND LK = '1' THEN DOUT <= DIN; END IF; END PROCESS; END behav;
四. 频率计测控器(分频器待改进)
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY FTCTRL IS PORT ( CLKK : IN STD_LOGIC; CNT_EN : OUT STD_LOGIC; RST_CNT : OUT STD_LOGIC; Load : OUT STD_LOGIC ); END FTCTRL; ARCHITECTURE behav OF FTCTRL IS SIGNAL Div2CLK : STD_LOGIC; BEGIN PROCESS( CLKK ) BEGIN IF CLKK'EVENT AND CLKK = '1' THEN Div2CLK <= NOT Div2CLK; END IF; END PROCESS; PROCESS (CLKK, Div2CLK) BEGIN IF CLKK='0' AND Div2CLK='0' THEN RST_CNT<='1'; ELSE RST_CNT <= '0'; END IF; END PROCESS; Load <= NOT Div2CLK; CNT_EN <= Div2CLK; END behav;
五. 状态机
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY SCHK IS PORT(DIN,CLK,CLR : IN STD_LOGIC; AB : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END SCHK;ARCHITECTURE BEHAV OF SCHK IS SIGNAL Q : INTEGER RANGE 0 TO 8; SIGNAL D : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN D<="11110000"; PROCESS(CLK,CLR) BEGINIF CLR = '1' THEN Q<=0;ELSIF CLK'EVENT AND CLK='1' THEN CASE Q IS WHEN 0=> IF DIN=D(7) THEN Q<=1; ELSE Q<=0; END IF; WHEN 1=> IF DIN=D(6) THEN Q<=2; ELSE Q<=0; END IF; WHEN 2=> IF DIN=D(5) THEN Q<=3; ELSE Q<=0; END IF; WHEN 3=> IF DIN=D(4) THEN Q<=4; ELSE Q<=0; END IF; WHEN 4=> IF DIN=D(3) THEN Q<=5; ELSE Q<=0; END IF; WHEN 5=> IF DIN=D(2) THEN Q<=6; ELSE Q<=0; END IF; WHEN 6=> IF DIN=D(1) THEN Q<=7; ELSE Q<=0; END IF; WHEN 7=> IF DIN=D(0) THEN Q<=8; ELSE Q<=0; END IF; END CASE; END IF;END PROCESS; PROCESS(Q) BEGIN IF Q=8 THEN AB<="1111"; ELSE AB<="0101"; END IF; END PROCESS;END BEHAV;
状态机序列检测器(改进版)
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY aaa IS PORT( CLK,CLR : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); AB : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END aaa;ARCHITECTURE BEHAV OF aaa IS SIGNAL Q : INTEGER RANGE 0 TO 8; SIGNAL D : STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN D<="10110001"; PROCESS(CLK,CLR) BEGIN IF CLR = '1' THEN Q<=0; ELSIF CLK'EVENT AND CLK='1' THEN IF DIN(7)=D(7) AND DIN(6)=D(6) AND DIN(5)=D(5) AND DIN(4)=D(4) AND DIN(3)=D(3) AND DIN(2)=D(2) AND DIN(1)=D(1) AND DIN(0)=D(0) THEN Q<=8; ELSE Q<=0; END IF; END IF; END PROCESS; PROCESS(Q) BEGIN CASE Q IS WHEN 8 => AB<="1111"; WHEN OTHERS => AB<="0000"; END CASE;END PROCESS;END BEHAV;
六. 数据选择器
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY MUX IS PORT( CLK,S0,S1 : IN STD_LOGIC; A,B,C : IN STD_LOGIC_VECTOR (7 DOWNTO 0); Y : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );END MUX;ARCHITECTURE BEHAV OF MUX IS SIGNAL S : STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN S <= S1&S0; PROCESS(S) BEGIN IF CLK'EVENT AND CLK = '1' THEN CASE S IS WHEN "00" => Y <= A; WHEN "01" => Y <= B; WHEN "10" => Y <= C; --WHEN "11" => Y <= D; WHEN OTHERS => NULL; END CASE; END IF; END PROCESS;END BEHAV;
七. 各种波形
正弦波
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SINGT IS PORT( CLK : IN STD_LOGIC; DOUT : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );END ENTITY;ARCHITECTURE DACC OF SINGT ISCOMPONENT SIN_ROM PORT( address : IN STD_LOGIC_VECTOR (5 DOWNTO 0); clock : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );END COMPONENT; SIGNAL Q1 : STD_LOGIC_VECTOR (5 DOWNTO 0); BEGIN PROCESS(CLK) BEGIN IF CLK'EVENT AND CLK = '1' THEN Q1 <= Q1+1; END IF; END PROCESS;U1 : SIN_ROM PORT MAP(address => Q1, q => DOUT,clock => CLK);END DACC;
方波(算法有待改进)
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SQUARE IS --GENERIC (D : INTEGER := 4); PORT( CLK : IN STD_LOGIC; DIN : IN STD_LOGIC_VECTOR(1 DOWNTO 0); CIN : IN STD_LOGIC_VECTOR(1 DOWNTO 0); Q : OUT INTEGER RANGE 0 TO 250 );END SQUARE;ARCHITECTURE BEHAV OF SQUARE IS SIGNAL D : INTEGER; SIGNAL COUNT : INTEGER;BEGIN PROCESS(DIN,CLK) BEGIN IF CLK'EVENT AND CLK = '1' THEN CASE(DIN) IS WHEN "00" => D <= 2; WHEN "01" => D <= 3; WHEN "10" => D <= 4; WHEN "11" => D <= 5; END CASE; END IF; END PROCESS; PROCESS(DIN,CLK) BEGIN IF CLK'EVENT AND CLK = '1' THEN CASE(CIN) IS WHEN "00" => COUNT <= 3; WHEN "01" => COUNT <= 2; WHEN "10" => COUNT <= 1; WHEN "11" => COUNT <= 0; END CASE; END IF; END PROCESS; PROCESS(CLK,D,COUNT) VARIABLE COUNT : INTEGER := 0; BEGIN IF CLK'EVENT AND CLK = '1' THEN IF COUNT >= D-1 THEN COUNT := 0; Q <= 0; ELSE COUNT := COUNT+1; Q <= 250; END IF; END IF; END PROCESS;END BEHAV;
锯齿波
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JUCHI IS PORT( CLK : IN STD_LOGIC; DOUT : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );END ENTITY;ARCHITECTURE DAC OF JUCHI ISCOMPONENT JUCHI_ROM PORT( address : IN STD_LOGIC_VECTOR (5 DOWNTO 0); clock : IN STD_LOGIC ; q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );END COMPONENT; SIGNAL Q1 : STD_LOGIC_VECTOR (5 DOWNTO 0); BEGIN PROCESS(CLK) BEGIN IF CLK'EVENT AND CLK = '1' THEN Q1 <= Q1+1; END IF; END PROCESS;J1 : JUCHI_ROM PORT MAP(address => Q1, q => DOUT,clock => CLK);END DAC;
0 0
- VHDL
- VHDL
- VHDL
- VHDL
- VHDL
- VHDL
- 有关VHDL
- 什么是VHDL?
- VHDL进程
- VHDL注意事项
- vhdl 学习心得
- VHDL 时钟
- VHDL笔记
- VHDL学习
- vhdl笔记--
- VHDL TEXTIO
- VHDL TEXTIO
- VHDL基础
- 欢迎使用CSDN-markdown编辑器
- MyBatis 官方文档学习3---XML 映射配置文件
- 微服务理论与实践(四)----微服务架构的六种模式
- 1619-7 张良 十月三十号总结 [连续第三十天]
- CentOS下安装redis和redis集群
- VHDL
- poj 3191The Moronic Cowmpouter (负进位制)
- NOIP2016 模拟赛[一中题]题解&总结
- Redis的发布订阅
- 基于maven的ssh框架一步一步搭建
- MyBatis 官方文档学习3---动态 SQL
- MySql启动出现The server quit without updating PID file错误解决过程
- 【Docker江湖】之创建Web应用服务镜像——Apache/Nginx
- 【Linux4.1.12源码分析】协议栈报文接收之传输层处理分析(UDP)