流水灯VHDL

合集下载

verilog- HDL实现流水灯

verilog- HDL实现流水灯

用verilog实现流水灯module flow_deng(input wire pin_clk_in,input wire pin_rest_n ,input wire [1:0] pin_ctrl,output reg [7:0] pin_led_out);wire clk ;reg [31: 0] counter32;//fen pingalways @ (posedge pin_clk_in or negedge pin_rest_n) begin if(pin_rest_n==1'b0) begincounter32 <= 32'b0;endelse begincounter32 <= counter32+1'b1;endendassign clk = counter32[3] ; //16 fen pinreg [4:0] state;parameter [4:0] IDLE =5'b0_0001;parameter [4:0] RIGHT =5'b0_0010;parameter [4:0] LEFT =5'b0_0100;parameter [4:0] DOUB_LEFT =5'b0_1000;parameter [4:0] ERROR =5'b1_0000;reg [4:0] cur_sta;always @ (posedge clk or negedge pin_rest_n) begin if(pin_rest_n==1'b0) beginstate <= IDLE ;endelse begincase (state)IDLE : beginif (pin_ctrl==2'b00) beginstate <= LEFT ;endelse if (pin_ctrl==2'b01) beginstate <= RIGHT ;endelse if (pin_ctrl==2'b10) beginstate <= DOUB_LEFT ;endelse beginstate <= ERROR ;endendLEFT : beginif (pin_ctrl==2'b00) beginstate <= LEFT ;endelse if (pin_ctrl==2'b01) beginstate <= RIGHT ;endelse if (pin_ctrl==2'b10) beginstate <= DOUB_LEFT ;endelse beginstate <= ERROR ;endendRIGHT : beginif (pin_ctrl==2'b00) beginstate <= LEFT ;endelse if (pin_ctrl==2'b01) beginstate <= RIGHT ;endelse if (pin_ctrl==2'b10) beginstate <= DOUB_LEFT ;endelse beginstate <= ERROR ;endendDOUB_LEFT : beginif (pin_ctrl==2'b00) beginstate <= LEFT ;endelse if (pin_ctrl==2'b01) beginstate <= RIGHT ;endelse if (pin_ctrl==2'b10) beginstate <= DOUB_LEFT ;endelse beginstate <= ERROR ;endendERROR : beginif (pin_ctrl==2'b00) beginstate <= LEFT ;endelse if (pin_ctrl==2'b01) beginstate <= RIGHT ;endelse if (pin_ctrl==2'b10) beginstate <= DOUB_LEFT ;endelse beginstate <= ERROR ;endenddefault: state <= IDLE ;endcaseendendalways @ (posedge clk or negedge pin_rest_n) beginif (pin_rest_n == 1'b0) beginpin_led_out[7:0]<=8'b0000_0000 ;endelse begincase (state)IDLE : beginpin_led_out [7:0] <=8'b0000_0000 ;endLEFT : beginif((pin_led_out[0]+pin_led_out[1]+pin_led_out[2]+pin_led_out[3]+pin_led_out[4]+pin_led_out[5]+pin_led_out[6]+pin_led_out[7])!=8'd1 ) beginpin_led_out[7:0] <= 8'b0000_0001;endelse beginpin_led_out[7:1] <= pin_led_out[6:0];pin_led_out[0] <= pin_led_out[7];endendRIGHT : beginif((pin_led_out[0]+pin_led_out[1]+pin_led_out[2]+pin_led_out[3]+pin_led_out[4]+pin_led_out[5 ]+pin_led_out[6]+pin_led_out[7])!=8'd1 ) beginpin_led_out [7:0] <= 8'b0000_0001 ;endelse beginpin_led_out [6:0] <= pin_led_out [7:1] ;pin_led_out [7] <= pin_led_out [0] ;endendDOUB_LEFT : beginif((pin_led_out[0]+pin_led_out[1]+pin_led_out[2]+pin_led_out[3]+pin_led_out[4]+pin_led_out[5] +pin_led_out[6]+pin_led_out[7])!=8'd2 ) beginpin_led_out [7:0] <= 8'b0000_0011 ;endelse beginpin_led_out [7:1] <= pin_led_out [6:0] ;pin_led_out [0] <= pin_led_out [7] ;endendERROR : beginpin_led_out [7:0]<=8'b1111_1111;enddefault : pin_led_out [7:0] <= 8'b0000_0000;endcaseendendendmodule。

EDA流水灯论文(VHDL)

EDA流水灯论文(VHDL)

滨江学院课程论文(可编程器件原理与应用)题目基于VHDL语言的流水灯设计学生姓名王秋阳学号20082305047院系滨江学院专业电子与信息工程指导教师刘建成二零一零年十二月三十日一、任务:采用ALTERA 公司的EPM7128SLC84-10芯片,通过VHDL 语言设计一个流水灯电路。

流水灯样式必须大于3种,且可以通过按键调节显示样式;可以通过按键调节流水灯变化快慢;当前流水灯样式和变化速度能够通过数码管显示出来;(附加:具有按键声)二、设计框图(框图说明)1MHZ 周期信号经过2个100分频,得到100HZ ,再经过1个10分频得到10HZ 信号,传给速度控制模块,得到需要的速度周期信号,然后传给样式选择模块,样式选择模块直接输出彩灯样式;控制模块通过接受两个按键信号,同时控制速度控制模块和样式选择模块;译码扫描模块通过判断控制模块,扫描数码管显示当前彩灯样式和彩灯变化速度;按键信号通过延时模块输出按键发生信号。

速度按键 样式按键控制模块速度控制样式选择译码和扫描数码显示彩灯显示1000HZ 信号100HZ 信号蜂鸣器三、原理图(CPLD内部原理说明)从原理图中可以看到,一共有8种模块,D触发器的作用是对按钮进行消抖,除D触发器之外的7个模块功能及作用如下:f100和f10分别是100和10的分频器,speed模块的作用是对彩灯变化速度进行控制,而style_switch模块的作用是对彩灯样式进行调节。

Control 模块接收按键信号对样式和速度进行总的控制。

Show模块是对速度值和样式值进行译码并进行扫描数码管,将当前样式和速度状态显示出来。

Delay模块则是对按键声的延时。

四、各个模块设计(波形仿真)1.f100模块功能:100分频波形仿真:VHDL代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity f100 is --100分频port(clk:in std_logic;sec:out std_logic);end entity f100;architecture getsec of f100 issignal secout : std_logic :='1';beginprocess(clk) isvariable count100: integer range 0 to 50;beginif clk'event and clk='1' thencount100:=count100+1;if count100=50 thensecout<=not secout;count100:=0;end if;end if;end process;sec<=secout;end architecture getsec;2.f10模块功能:10分频波形仿真:VHDL代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity f10 is –-10分频port(clk:in std_logic;sec:out std_logic);end entity f10;architecture getsec of f10 issignal secout : std_logic :='1';beginprocess(clk) isvariable count10: integer range 0 to 5;beginif clk'event and clk='1' thencount10:=count10+1;if count10=5 thensecout<=not secout;count10:=0;end if;end if;end process;sec<=secout;end architecture getsec;3.speed模块功能:根据DATE输入端的数值大小,产生不同频率的周期信号,从而达到控制彩灯变化速率的目的。

流水灯VHDL Done1

流水灯VHDL  Done1

基于VHDL流水灯的设计电子信息科学与技术刘敏何磊成江波一、设计内容流水灯是一串按一定的规律像流水一样连续闪亮,流水灯控制是可编程控制器的一个应用,其控制思想在工业控制技术领域也同样适用。

流水灯控制可用多种方法实现,但对现代可编程控制器而言,基于EDA技术的流水灯设计也是很普遍的。

要求采用可编程逻辑器件实现一个流水灯控制电路,12个LED灯能连续发出4种不同的流水显示形式。

彩灯控制器的第1种花样为彩灯按顺时针方向逐次点亮;第2种花样为彩灯按逆时针方向逐次点亮,然后全灭全亮;第3种花样为彩灯两边同时亮1、"2、3、"4、5、"6个逐次向中间移动再散开;第4种花样为彩灯连续交叉闪烁。

多个花样自动变换,循环往复。

二、设计方案彩灯是由FPGA板上的LED灯代替,有以下4种闪烁效果1.彩灯按顺时针方向逐次点亮。

2.彩灯按逆时针方向逐次点亮,然后全灭全亮。

3.彩灯两边同时亮1、"2、4、5、"6个逐次向中间移动再散开。

4.彩灯连续交叉闪烁。

本控制电路采用VHDL语言设计。

运用自顶而下的设计思想,按功能逐层分割实现层次化设计。

根据多路彩灯控制器的设计原理,分别对应彩灯的四种变化模式、利用VHDL语言实现该功能.三、系统框图脉冲信号顺序脉冲译码逻辑电路流水灯闪烁四、流水灯设计程序library IEEE;use IEEE.STD_LOGIC_1164."all;use IEEE.STD_LOGIC_unsigned.all;entity led1 isport(sysclk:in std_logic;out std_logic_vector(11 downto 0) );end led1;architecture jgt of led1 isstd_logic_vector ( 7 downto 0);--variable count:integer RANGE 0 TO 7;signal count :std_logic_vector(5 DOWNTO 0); beginprocess(sysclk)beginif ( sysclk'event and sysclk = '1') thencount <=count+1;end if ;end if;end process;process (count)case count iswhen "000" =>dout <= ""; when "0001" =>dout <= ""; when "0010" =>dout <= ""; when "0011" =>dout <= ""; when "000100" =>dout <= ""; when "0001" =>dout <= ""; when "000110" =>dout <= ""; when "000111" =>dout <= ""; when "001000" =>dout <= ""; when "001" =>dout <= ""; when "0010" =>dout <= ""; when "0011" =>dout <= ""; when "001100" =>dout <= ""; when "001101" =>dout <= ""; when "001110" =>dout <= ""; when "0011" =>dout <= ""; when "0100" =>dout <= ""; when "010001" =>dout <= ""; when "010" =>dout <= "";when "0100" =>dout <= "";when "0101" =>dout <= "";when "0110" =>dout <= "";when "0111" =>dout <= "111111"; when "011000" =>dout <= "000000"; when "011001" =>dout <= ""; when "0110" =>dout <= "";when "011" =>dout <= "1";when "011100" =>dout <= ""; when "011101" =>dout <= ""; when "0110" =>dout <= "";when "0111" =>dout <= "";when "1000" =>dout <= "";when "1001" =>dout <= "1";when "100010" =>dout <= ""; when "100011" =>dout <= ""; when "100" =>dout <= "";when "1001" =>dout <= "110011"; when "100110" =>dout <= "110011"; when "100111" =>dout <= "110011";when "1001" =>dout <= "0";when "1010" =>dout <= "1";when "1011" =>dout <= "0";when "101100" =>dout <= "001100"; when "101" =>dout <= "110011"; when "101110" =>dout <= ""; when "1011" =>dout <= "000111"; when "1100" =>dout <= "010101"; when "110001" =>dout <= "101010"; when "110010" =>dout <= "010101"; when "110011" =>dout <= "101010"; when "1100" =>dout <= "010101"; when "1101" =>dout <= "101010"; when "110" =>dout <= "010101"; when "110111" =>dout <= "101010"; when "111000" =>dout <= "010101"; when "111001" =>dout <= "101010"; when "1110" =>dout <= "010101"; when "111011" =>dout <= "101010"; when "1100" =>dout <= "010101";when "1101" =>dout <= "101010";when "1110" =>dout <= "010101";when "111" =>dout <= "101010";when others=>null;end case;end process;end jgt;五、系统仿真与调试1.仿真波形图通过QuartusII软件,我们进行了仿真,其仿真波形如下图:图一:仿真波形图由设计要求可知,本设计要求采用可编程逻辑器件实现一个流水灯控制电路,12个LED灯能连续发出4种不同的流水显示形式。

可编程逻辑器件应用流水灯VHDL设计报告

可编程逻辑器件应用流水灯VHDL设计报告

目录一、任务分工 (2)一、系统设计 (2)1.1模式自动切换 (2)1.2自动时钟分频 (2)1.3 模式与分频融合 (2)二、总体方案 (3)1模块化设计 (3)1.1假定输入时钟,计算变频时间 (3)1.2模式切换实时跟随输入时钟切换 (3)二、最终程序 (4)1分频模块 (4)2、模式控制模块 (5)三、仿真结果 (7)1、分频仿真 (7)2、流水灯仿真 (7)四、实验成果 (8)一、任务分工王定:变频模块设计裴振伟:模式切换王涛、贾晋生:实验仿真吴晓屹:ppt制作一、系统设计1.1模式自动切换对系统时钟输入进行计数:每个各上升沿来临时,led 灯都会做出相应的变化。

1.2自动时钟分频对系统输入时钟多段分频:本设计利用脉冲精准计时,以100HZ信号为例,周期为10ms。

每512个脉冲计数进行一次分频,时间大约500ms为一个节点。

进行了四次分频,分别为二分频、四分频、八分频、十六分频。

1.3 模式与分频融合变频模块与模式控制模块独立工作,其产生的原理图如下图1自变频流水灯原理图二、总体方案1模块化设计1.1假定输入时钟,计算变频时间1.2模式切换实时跟随输入时钟切换二、最终程序1分频模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;----------------------------------------------ENTITY FENPIN ISPORT(clk: IN STD_LOGIC;--时钟输入fenpinout: OUT STD_LOGIC);END ENTITY FENPIN;---------------------------------------------------ARCHITECTURE rtl OF FENPIN ISSIGNAL count:STD_LOGIC_VECTOR(3 DOWNTO 0); --定义一个四位的信号SIGNAL countout:STD_LOGIC_VECTOR(11 DOWNTO 0); --定义一个四位的信号]BEGINPROCESS(clk)BEGINIF(clk' event AND clk ='1') THEN --上升沿到来,100HZ,T=1/100S=0.01S=10ms countout<=countout+1;IF (count="1111") THEN --达到最大计数值count<="0000"; --置零ELSEcount<=count+1; --计数END IF;END IF;IF (countout>="100111111100") THENcountout<="000000000000";ELSIF (countout<="000111111111") THEN --512fenpinout<=count(0);ELSIF (countout>"000111111111") AND (countout<="001111111111") THEN fenpinout<=count(1);ELSIF (countout>"001111111111") AND (countout<="010*********") THENfenpinout<=count(2);ELSIF (countout>"010*********") AND (countout<="011111111101") THEN fenpinout<=count(3);END IF;END PROCESS;END rtl;2、模式控制模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY LED_MODE ISPORT(CLK:IN STD_LOGIC;LED_OUT:OUT STD_LOGIC_VECTOR(11 DOWNTO 0));END ENTITY LED_MODE;ARCHITECTURE BEHAVE OF LED_MODE ISBEGINPROCESS(CLK) ISVARIABLE TEMP: INTEGER RANGE 0 TO 47;BEGINIF (CLK'EVENT AND CLK='1') THENtemp:=temp+1;CASE TEMP ISWHEN 0 => LED_OUT <="111111111110";WHEN 1=> LED_OUT <="111111111101";WHEN 2=> LED_OUT <="111111111011";WHEN 3=> LED_OUT <="111111110111";WHEN 4=> LED_OUT <="111111101111";WHEN 5=> LED_OUT <="111111011111";WHEN 6=> LED_OUT <="111110111111";WHEN 7=> LED_OUT <="111101111111";WHEN 8=> LED_OUT <="111011111111";WHEN 9=> LED_OUT <="110111111111";WHEN 10=> LED_OUT <="101111111111";WHEN 11=> LED_OUT <="011111111111";WHEN 12=> LED_OUT <="011111111111";WHEN 13=> LED_OUT <="101111111111";WHEN 14=> LED_OUT <="110111111111";WHEN 15=> LED_OUT <="111011111111";WHEN 16=> LED_OUT <="111101111111";WHEN 17=> LED_OUT <="111110111111";WHEN 18=> LED_OUT <="111111011111";WHEN 19=> LED_OUT <="111111101111";WHEN 20=> LED_OUT <="111111110111";WHEN 21=> LED_OUT <="111111111011";WHEN 22=> LED_OUT <="111111111101";WHEN 23=> LED_OUT <="111111111110";WHEN 24=> LED_OUT <="111111111111";WHEN 25=> LED_OUT <="011111111110";WHEN 26=> LED_OUT <="101111111101";WHEN 27=> LED_OUT <="110111111011";WHEN 28=> LED_OUT <="111011110111";WHEN 29=> LED_OUT <="111101101111";WHEN 30=> LED_OUT <="111110011111";WHEN 31=> LED_OUT <="111101101111";WHEN 32=> LED_OUT <="111011110111";WHEN 33=> LED_OUT <="110111111011";WHEN 34=> LED_OUT <="101111111101";WHEN 35=> LED_OUT <="011111111110";WHEN 36=> LED_OUT <="111111111111";WHEN 37=> LED_OUT<="001111111111";WHEN 38=> LED_OUT <="100111111111";WHEN 39=> LED_OUT <="110011111111";WHEN 40=> LED_OUT <="111001111111";WHEN 41=> LED_OUT <="111100111111";WHEN 42=> LED_OUT <="111110011111";WHEN 43=> LED_OUT <="111111001111";WHEN 44=> LED_OUT <="111111100111";WHEN 45=> LED_OUT <="111111110011";WHEN 46=> LED_OUT <="111111111001";WHEN 47=> LED_OUT <="111111111100";WHEN OTHERS=>LED_OUT<="111111111111";END CASE;END IF;END PROCESS;END BEHAVE;三、仿真结果1、分频仿真由于频率切换所需脉冲数量过多,不便于观测,未进行仿真。

VerilogHDL流水灯设计

VerilogHDL流水灯设计

VerilogHDL流水灯设计第一篇:VerilogHDL流水灯设计大规模数字逻辑题目:流水灯控制专业电子信息科学与技术班级学号学生姓名设计时间教师评分2013年 12 月 10 日目录一、概述 (1)二、设计目的 (1)三、设计内容 (1)四、设计原理图 (1)五、引脚分配情况 (2)六、源程序代码...........................................2 VerilogHDL 程序:.....................................2 分频器部分: (5)七、心得体会 (6)八、参考文献 (6)一、概述流水灯是一串按一定的规律像流水一样连续闪亮,流水灯控制是可编程控制器的一个应用,其控制思想在工业控制技术领域也同样适用。

流水灯控制可用多种方法实现,但对现代可编程控制器而言,基于EDA技术的流水灯设计也是很普遍的。

二、设计目的1、熟悉利用Quartus II 开发数字电路的基本流程和Quartus II 软件的相关操作。

2、掌握基本的设计思路,软件环境参数配置,仿真,管脚分配,利用JTAG/AS进行下载等基本操作。

3、了解VerilogHDL 语言设计或原理图设计方法。

4、通过本此设计,了解流水灯的工作原理,掌握其逻辑功能及设计方法。

三、设计内容1、用VerilogHDL语言设计一个流水灯,输入0的时候led~led7,1Hz正向流水3次,然后全亮;然后2Hz逆向流水5次全亮;循环。

输入1的时候led0~led7,0.5Hz奇数流水2次,全亮,1Hz偶数流水4次,全亮,然后循环。

2、用QuartusII 软件进行编译,仿真,下载到实验平台进行验证。

四、设计原理图en为可调输入,输出为8位数据,为流水灯实验,试用8个LED 指示灯来表示,具体引脚分配见下。

五、引脚分配情况六、源程序代码VerilogHDL 程序:module LED(clk,led,en);input clk;input en;output [7:0]led;// 输出端口定义为寄存器型reg [7:0] led;reg [8:0] state1;reg [8:0] state2;always @(posedge clk)// always语句,表示每当CLK的上升沿到来时,完成begin-end之间语句的操作if(!en)begin state2 = 0;state1 = state1 + 1;// one clk,one statecase(state1)1,2: led <= 8'b00000001;//1-7 zhengxu,3bian3,4: led <= 8'b00000010;7,8: led <= 8'b00001000;9,10: led <= 8'b00010000;11,12: led <= 8'b00100000;13,14: led <= 8'b01000000;15,16: led <= 8'b10000000;17,18: led <= 8'b00000001;19,20: led <= 8'b00000010;21,22: led <= 8'b00000100;23,24: led <= 8'b00001000;25,26: led <= 8'b00010000;27,28: led <= 8'b00100000;29,30: led <= 8'b01000000;31,32: led <= 8'b10000000;33,34: led <= 8'b00000001;35,36: led <= 8'b00000010;37,38: led <= 8'b00000100;39,40: led <= 8'b00001000;41,42: led <= 8'b00010000;43,44: led <= 8'b00100000;45,46: led <= 8'b01000000;47,48: led <= 8'b10000000;49: led <= 8'b11111111;//quanliang 50: led <= 8'b10000000;51: led <= 8'b01000000;52: led <= 8'b00100000;53: led <= 8'b00010000;54: led <= 8'b00001000;55: led <= 8'b00000100;56: led <= 8'b00000010;58: led <= 8'b10000000; 59: led <= 8'b01000000; 60: led <= 8'b00100000; 61: led <= 8'b00010000; 62: led <= 8'b00001000; 63: led <= 8'b00000100; 64: led <= 8'b00000010; 65: led <= 8'b00000001; 66: led <= 8'b10000000; 67: led <= 8'b01000000; 68: led <= 8'b00100000; 69: led <= 8'b00010000; 70: led <= 8'b00001000; 71: led <= 8'b00000100; 72: led <= 8'b00000010; 73: led <= 8'b00000001; 74: led <= 8'b10000000; 75: led <= 8'b01000000; 76: led <= 8'b00100000; 77: led <= 8'b00010000; 78: led <= 8'b00001000; 79: led <= 8'b00000100; 80: led <= 8'b00000010; 81: led <= 8'b00000001; 82: led <= 8'b10000000; 83: led <= 8'b01000000; 84: led <= 8'b00100000; 85: led <= 8'b00010000; 86: led <= 8'b00001000;88: led <= 8'b00000010;89: led <= 8'b00000001;90: led <= 8'b11111111;91: begin led <= 8'b00000000;state1=0;end default: state1 = 0;endcaseendelsebegin state1 = 0;state2 = state2 + 1;// one clk,one statecase(state2)1,2,3,4: led <= 8'b00000001;5,6,7,8: led <= 8'b00000100;9,10,11,12: led <= 8'b00010000;13,14,15,16: led <= 8'b01000000;17,18,19,20: led <= 8'b00000001;21,22,23,24: led <= 8'b00000100;25,26,27,28: led <= 8'b00010000;29,30,31,32: led <= 8'b01000000;33: led <= 8'b11111111;34,35: led <= 8'b00000010;36,37: led <= 8'b00001000;38,39: led <= 8'b00100000;40,41: led <= 8'b10000000;42,43: led <= 8'b00000010;44,45: led <= 8'b00001000;46,47: led <= 8'b00100000;48,49: led <= 8'b10000000;50,51: led <= 8'b00000010;52,53: led <= 8'b00001000;54,55: led <= 8'b00100000;56,57: led <= 8'b10000000;58,59: led <= 8'b00000010;60,61: led <= 8'b00001000;62,63: led <= 8'b00100000;64,65: led <= 8'b10000000;66: led <= 8'b11111111;67:begin led <= 8'b00000000;state2=0;enddefault: state2 = 0;// default,8'b11111110endcaseend Endmodule分频器部分:module clk_div(clk_out,clk_in);input clk_in;output clk_out;reg clk_out;reg[25:0]counter;//50_000_000=1011_1110_1011_1100_0010_0000_00 parameter cnt=25_000_000;/// 50MHz is the sys clk,50_000_000=2FAF080always @(posedge clk_in)begincounter<=counter+1;if(counter==cnt/2-1)beginclk_out<=!clk_out;counter<=0;endend endmodule 5七、心得体会通过这次课程设计,我拓宽了知识面,锻炼了能力,综合素质得到较大提高。

本实验为LED流水灯实验VHDL

本实验为LED流水灯实验VHDL

--本实验为LED流水灯实验。

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.std_logic_unsigned.ALL;ENTITY LampsSequencer isPORT(clk:in STD_LOGIC;led1:out STD_LOGIC_VECTOR(7 DOWNTO 0));END LampsSequencer;ARCHITECTURE light OF LampsSequencer ISSIGNAL clk1,CLK2:std_logic;BEGINP1:PROCESS (clk)V ARIABLE count:INTEGER RANGE 0 TO 999999;BEGINIF clk'EVENT AND clk='1' THEN --当时钟脉冲上升沿到来时执行下面语句IF count<=499999 THENclk1<='0'; --当count<=499999时divls=0并且count加1count:=count+1;ELSIF count>=499999 AND count<=999999 THEN --当ount>=499999 并且count<=999998时clk1<='1'; --count:=count+1; --clk1=1并且count加1ELSE count:=0; --当count>=499999时清零count1END IF;END IF;END PROCESS ;P3:PROCESS(CLK1)beginIF clk1'event AND clk1='1'THENclk2<=not clk2;END IF;END PROCESS P3;---------------------------------------------------------P2:PROCESS(clk2)variable count1:INTEGER RANGE 0 TO 16; --定义的整型变量用做计数器BEGIN --IF clk2'event AND clk2='1'THEN --当时钟脉冲上升沿到来时执行下面语句if count1<=16 then --当COUNT1<=9时执行下面语句if count1=15 then --当COUNT1=8时,COUNT1清零count1:=0; -- end if; --CASE count1 IS --CASE语句给输出LED1赋值WHEN 0=>led1<="11111110"; --依次点亮发光二极管WHEN 1=>led1<="11111100"; --WHEN 2=>led1<="11111000"; --WHEN 3=>led1<="11110000"; --WHEN 4=>led1<="11100000"; --WHEN 5=>led1<="11000000"; --WHEN 6=>led1<="10000000"; --WHEN 7=>led1<="00000000";WHEN 8=>led1<= "01111111"; --依次点亮发光二极管WHEN 9=>led1<= "00111111"; --WHEN 10=>led1<="00011111"; --WHEN 11=>led1<="00001111"; --WHEN 12=>led1<="00000111"; --WHEN 13=>led1<="00000011"; --WHEN 14=>led1<="00000001"; --WHEN 15=>led1<="00000000"; -- --WHEN OTHERS=>led1<="11111111";END CASE;count1:=count1+1;end if;end if;end process;END light;。

vhdl流水灯课程设计报告

vhdl流水灯课程设计报告

院系:姓名:学号:课程设计名称:指导老师:时间:摘要VHDL的特点应用VHDL进行系统设计,有以下几方面的特点。

(一)功能强大VHDL具有功能强大的语言结构。

它可以用明确的代码描述复杂的控制逻辑设计。

并且具有多层次的设计描述功能,支持设计库和可重复使用的元件生成。

VHDL是一种设计、仿真和综合的标准硬件描述语言。

(二)可移植性VHDL语言是一个标准语言,其设计描述可以为不同的EDA工具支持。

它可以从一个仿真工具移植到另一个仿真工具,从一个综合工具移植到另一个综合工具,从一个工作平台移植到另一个工作平台。

此外,通过更换库再重新综合很容易移植为ASIC设计。

(三)独立性VHDL的硬件描述与具体的工艺技术和硬件结构无关。

设计者可以不懂硬件的结构,也不必管最终设计实现的目标器件是什么,而进行独立的设计。

程序设计的硬件目标器件有广阔的选择范围,可以是各系列的CPLD、FPGA及各种门阵列器件。

(四)可操作性由于VHDL具有类属描述语句和子程序调用等功能,对于已完成的设计,在不改变源程序的条件下,只需改变端口类属参量或函数,就能轻易地改变设计的规模和结构。

(五)灵活性VHDL最初是作为一种仿真标准格式出现的,有着丰富的仿真语句和库函数。

使其在任何大系统的设计中,随时可对设计进行仿真模拟。

所以,即使在远离门级的高层次(即使设计尚未完成时),设计者就能够对整个工程设计的结构和功能的可行性进行查验,并做出决策。

VHDL的设计结构VHDL描述数字电路系统设计的行为、功能、输入和输出。

它在语法上与现代编程语言相似,但包含了许多与硬件有特殊关系的结构。

VHDL将一个设计称为一个实体Entity(元件、电路或者系统),并且将它分成外部的可见部分(实体名、连接)和内部的隐藏部分(实体算法、实现)。

当定义了一个设计的实体之后,其他实体可以利用该实体,也可以开发一个实体库。

所以,内部和外部的概念对系统设计的VHDL是十分重要的。

verilog语言循环流水灯LED流水从中间向两边点依次点亮

verilog语言循环流水灯LED流水从中间向两边点依次点亮

verilog语言循环流水灯LED流水从中间向两边点依
次点亮
目的是实现FPGA开发板上的四个LED灯依次点亮,每次只点亮一个,每个点亮时间是0.5s。

输入有时钟和复位信号,一路输出连接到FPGA开发板上的四个LED灯。

设置输出信号位宽四位宽,刚好一个位宽控制一个LED灯亮灭。

需要设置一个中间变量计数器,初值为0,因为50MHz晶振,0.5秒计数为25000000,从0开始计数,所以计数器计数最大值为24_999_999,当计数器在复位信号无效或计数到最大值时,对计数器进行清零操作。

再设置一个计数标致信号,在计数器计数到最大值时,拉高一个时钟周期的高电平,其他时刻保持低电平。

led灯是低电平点亮,所以想要第一个灯点亮就需要对输出信号赋初值1110,然后当计数标致信号为高电平且复位信号无效时,赋值为1101,下一个周期为1011,再下一个周期为0111,然后再是1110,这样就实现了流水灯效果。

这里需要用到移位操作,但需要注意的是在移位过程中,补位补的是0,及1101,1010,0100,1000,0000这就意味着最后所有灯都处于被点亮的状态,与目标不符。

于是再定义一个新的变量,对输出信号进行寄存。

初值为0001,接下来是0010,0100,1000,0001,输出信号对这个变量取反就可以得到预期结果。

计数到最大值时归零,计数器标致信号在最大值处拉高一个时钟周期,led输出与预期吻合。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于VHDL流水灯的设计电子信息科学与技术刘敏何磊成江波一、设计内容流水灯是一串按一定的规律像流水一样连续闪亮,流水灯控制是可编程控制器的一个应用,其控制思想在工业控制技术领域也同样适用。

流水灯控制可用多种方法实现,但对现代可编程控制器而言,基于EDA技术的流水灯设计也是很普遍的。

要求采用可编程逻辑器件实现一个流水灯控制电路,12个LED灯能连续发出4种不同的流水显示形式。

彩灯控制器的第1种花样为彩灯按顺时针方向逐次点亮;第2种花样为彩灯按逆时针方向逐次点亮,然后全灭全亮;第3种花样为彩灯两边同时亮1、2、3、4、5、6个逐次向中间移动再散开;第4种花样为彩灯连续交叉闪烁。

多个花样自动变换,循环往复。

二、设计方案彩灯是由FPGA板上的LED灯代替,有以下4种闪烁效果1.彩灯按顺时针方向逐次点亮。

2.彩灯按逆时针方向逐次点亮,然后全灭全亮。

3.彩灯两边同时亮1、2、3、4、5、6个逐次向中间移动再散开。

4.彩灯连续交叉闪烁。

本控制电路采用VHDL语言设计。

运用自顶而下的设计思想,按功能逐层分割实现层次化设计。

根据多路彩灯控制器的设计原理,分别对应彩灯的四种变化模式、利用VHDL语言实现该功能.三、系统框图四、流水灯设计程序library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_unsigned.all;entity led1 isport(sysclk: in std_logic;dout: out std_logic_vector(11 downto 0) );end led1;architecture jgt of led1 issignal cnt : std_logic_vector ( 7 downto 0);--variable count:integer RANGE 0 TO 7;signal count : std_logic_vector(5 DOWNTO 0);beginprocess(sysclk)beginif ( sysclk'event and sysclk = '1') thencnt <= cnt + 1;if (cnt = "11110111") thencnt <= "00000000" ;count <=count+1;end if ;end if;end process;process (count)begincase count iswhen "000000" =>dout <= "111111111110";when "000001" =>dout <= "111111111101";when "000010" =>dout <= "111111111011";when "000011" =>dout <= "111111110111";when "000100" =>dout <= "111111101111";when "000101" =>dout <= "111111011111";when "000110" =>dout <= "111110111111";when "000111" =>dout <= "111101111111";when "001000" =>dout <= "111011111111";when "001001" =>dout <= "110111111111";when "001010" =>dout <= "101111111111";when "001011" =>dout <= "011111111111";when "001100" =>dout <= "101111111111";when "001101" =>dout <= "110111111111";when "001110" =>dout <= "111011111111";when "001111" =>dout <= "111101111111";when "010000" =>dout <= "111110111111";when "010001" =>dout <= "111111011111";when "010010" =>dout <= "111111101111";when "010011" =>dout <= "111111110111";when "010100" =>dout <= "111111111011";when "010101" =>dout <= "111111111101";when "010110" =>dout <= "111111111110";when "010111" =>dout <= "111111111111";when "011000" =>dout <= "000000000000";when "011001" =>dout <= "011111111110";when "011010" =>dout <= "101111111101";when "011011" =>dout <= "110111111011";when "011100" =>dout <= "111011110111";when "011101" =>dout <= "111101101111";when "011110" =>dout <= "111110011111";when "011111" =>dout <= "111101101111";when "100000" =>dout <= "111011110111";when "100001" =>dout <= "110111111011";when "100010" =>dout <= "101111111101";when "100011" =>dout <= "011111111110";when "100100" =>dout <= "001111111100";when "100101" =>dout <= "110011110011";when "100110" =>dout <= "111100001111";when "100111" =>dout <= "110011110011";when "101000" =>dout <= "001111111100";when "101001" =>dout <= "000111111000";when "101010" =>dout <= "111000000111";when "101011" =>dout <= "000111111000";when "101100" =>dout <= "000011110000";when "101101" =>dout <= "111100001111";when "101110" =>dout <= "000001100000";when "101111" =>dout <= "000000111111";when "110000" =>dout <= "010*********";when "110001" =>dout <= "101010101010";when "110010" =>dout <= "010*********"; when "110011" =>dout <= "101010101010"; when "110100" =>dout <= "010*********"; when "110101" =>dout <= "101010101010"; when "110110" =>dout <= "010*********";when "110111" =>dout <= "101010101010";when "111000" =>dout <= "010*********"; when "111001" =>dout <= "101010101010"; when "111010" =>dout <= "010*********";when "111011" =>dout <= "101010101010";when "111100" =>dout <= "010*********";when "111101" =>dout <= "101010101010";when "111110" =>dout <= "010*********";when "111111" =>dout <= "101010101010";when others=>null;end case;end process;end jgt;五、系统仿真与调试1.仿真波形图通过QuartusII软件,我们进行了仿真,其仿真波形如下图:图一:仿真波形图由设计要求可知,本设计要求采用可编程逻辑器件实现一个流水灯控制电路,12个LED 灯能连续发出4种不同的流水显示形式。

相关文档
最新文档