基于VHDL的流水灯设计
Verilog流水灯实验报告

流水灯实验报告实验二 流水灯一、 实验目的学会编写一个简单的流水灯程序并掌握分频的方法。
熟悉Modelsim 仿真软件的使用。
二、 实验要求用Quartus 编写流水灯程序,在Modelsim 软件中进行仿真。
三、 实验仪器和设备1、 硬件:计算机2、 软件:Quartus 、Modelsim 、(UE )四、 实验内容1、 将时钟周期进行分频。
2、 编写Verilog 程序实现LED 等依次亮灭,用Modelsim 进行仿真,绘制波形图。
五、 实验设计(一)分频原理已知时钟周期f 为50MHz ,周期T 为1/f ,即20ns 。
若想得到四分频计数器,即周期为80ns 的时钟,需要把时钟进行分频。
即每四个时钟周期合并为一个周期。
原理图如图1所示。
rst_nclkclk_4图1 四分频原理图 (二)流水灯设计思路1、实现4盏LED灯依次隔1s亮灭,即周期为1s;2、计算出频率f为1/T=1Hz;3、设置计数器cnt,当检测到clk上升沿时开始计数,当cnt计数到24_999_999时,clk_4跳变为1,LED灯亮起,当cnt计数49_999_999时,clk_4置0,LED灯熄灭。
4、给LED赋初值4’b0001,第一盏灯亮。
5、利用位拼接,实现循环。
(三)设计框图图2 设计基本框图(四)位拼接的用法若输入a=4'b1010,b=3'b101,c=4'b0101,想要使输出d=5'b10001用位拼接,符号“{ }”:d<={b[2:1],c[1],a[2:1]}即把b的低1~2位10,c的低1位0,a的低1~2位01拼接起来,得到10 0 01。
流水灯4'b00014'b00104'b01004'b1000相当于把低三位左移,并最高位放在最低位。
用位拼接可写为:led<={led[2:0], led[3]};低三位最高位六、实验方法和步骤(一)时钟分频1、编写分频程序。
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设计报告

目录一、任务分工 (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流水灯设计大规模数字逻辑题目:流水灯控制专业电子信息科学与技术班级学号学生姓名设计时间教师评分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七、心得体会通过这次课程设计,我拓宽了知识面,锻炼了能力,综合素质得到较大提高。
流水灯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、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 "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 "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种不同的流水显示形式。
基于EP2C8Q208C8(VHDL)芯片的流水灯程序

library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity light isPort ( clk : in STD_LOGIC;rst : in STD_LOGIC;LED_RUN : out STD_LOGIC_VECTOR (7 downto 0)); end light;architecture Behavioral of light issignal cnt: STD_LOGIC_VECTOR(25 downto 0);signal LED: STD_LOGIC_VECTOR(7 downto 0);beginprocess(clk,rst)variable step: integer range 0 to 19;beginif(rst='0')thenLED<="11111111";step:=0;cnt<=(others=>'0');elsif(clk'event and clk='1')thenif(cnt="100110001001011010000000")thencase step iswhen 0=>LED<=(others=>'0');when 1=>LED<=(0=>'0',others=>'1');when 2=>LED<=(1=>'0',others=>'1');when 3=>LED<=(2=>'0',others=>'1');when 4=>LED<=(3=>'0',others=>'1');when 5=>LED<=(4=>'0',others=>'1');when 6=>LED<=(5=>'0',others=>'1');when 7=>LED<=(6=>'0',others=>'1');when 8=>LED<=(7=>'0',others=>'1');when 9=>LED<=(0=>'0',1=>'0',others=>'1');when 10=>LED<=(1=>'0',2=>'0',others=>'1');when 11=>LED<=(2=>'0',3=>'0',others=>'1');when 12=>LED<=(3=>'0',4=>'0',others=>'1');when 13=>LED<=(4=>'0',5=>'0',others=>'1');when 14=>LED<=(5=>'0',6=>'0',others=>'1');when 15=>LED<=(6=>'0',7=>'0',others=>'1');when 16=>LED<=(3=>'0',4=>'0',others=>'1');when 17=>LED<=(2=>'0',5=>'0',others=>'1');when 18=>LED<=(1=>'0',6=>'0',others=>'1');when 19=>LED<=(0=>'0',7=>'0',others=>'1');end case;step:=step+1;if(step>=20)thenstep:=0;end if;cnt <=(others=>'0');elsecnt<=cnt+1;end if;end if;end process;LED_RUN<=LED;end Behavioral;。
EDA_FPGA_VHDL_流水灯
--深圳市21EDA电子--开发板型号:A-C8V4--学习LED控制。
LED灯对应的脚为0时,点亮。
为1时变暗--视频教程适合我们21EDA电子的所有学习板LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.std_logic_unsigned.ALL;ENTITY LEDA isPORT(clk:in STD_LOGIC; --System Clk --时钟输入led1:out STD_LOGIC_VECTOR(7 DOWNTO 0)); --LED output定义了8个--我们这里实际只用了6个灯。
END LEDA ;ARCHITECTURE light OF LEDA ISSIGNAL clk1,CLK2:std_logic;BEGINP1:PROCESS (clk)VARIABLE count:INTEGER RANGE 0 TO 9999999;BEGINIF clk'EVENT AND clk='1' THEN --当时钟脉冲上升沿到来时执行下面语句IF count<=4999999 THENclk1<='0'; --当count<=499999时divls=0并且count加1count:=count+1;ELSIF count>=4999999 AND count<=9999999 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;。
本实验为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;。
verilog实验报告流水灯数码管秒表交通灯
流水灯实验目的:在basys2开发板上实现LED灯的花样流水的显示,如隔位显示,依次向左移位显示,依次向右移位显示,两边同时靠中间显示。
实验仪器:FPGA开发板一块,计算机一台。
实验原理:当一个正向的电流通过LED时,LED就会发光。
当阳极的电压高于阴极的电压时,LED就会有电流通过。
当在LED上增添一个典型值为1.5V—2.0V之间的电压时,LED就会有电流通过并发光。
实验内容:顶层模块:输入信号:clk_50MHz(主时钟信号),rst(重置信号),输出信号:[7:0] led(LED灯控制信号)。
module led_top(clkin,rst,led_out);input clkin, rst;output [7:0] led_out;wire clk_1hz;divider_1hz d0(clkin, rst, clk_1hz);led l0(clk_1hz, rst, led_out);endmodule分频模块:module divider_1hz(clkin,rst,clkout);input clkin,rst;output reg clkout;reg [24:0] cnt;always@(posedge clkin, posedge rst)beginif(rst) begincnt<=0;clkout<=0; endelse if(cnt==24999999) begincnt<=0;clkout=!clkout; endelse cnt<=cnt+1;endendmodule亮灯信号模块:module led(clkin,rst,led_out);input clkin,rst;output [7:0] led_out;reg [2:0] state;always@(posedge clkin, posedge rst)if(rst) state<=0;else state<=state+1;always@(state)case(state)3'b000:ledout<=8'b0000_0001;3'b001:ledout<=8'b0000_0010;3'b010:ledout<=8'b0000_0100;3'b011:ledout<=8'b0000_1000;3'b100:ledout<=8'b0001_0000;3'b101:ledout<=8'b0010_0000;3'b110:ledout<=8'b0100_0000;3'b111:ledout<=8'b1000_0000;endcaseendmodule实验中存在的问题:1 芯片选择问题automotive spartan3EXA3S100E XA3S250E CPG132spartan3EXC3S100E XC3S250E CP1322 时序逻辑部分,阻塞赋值和非阻塞赋值混用always@(posedge clk)begina=b+c;d<=e+f;end3 UCF文件格式错误NET “CLK” LOC = “B8”;NET “a” LOC = “N11”;NET “b” LOC = “G13”;NET “c[0]”LOC =“K11;数码管实验目的:设计一个数码管动态扫描程序,实现在四位数码管上动态循环显示“1”、“2”“3”“4”;实验仪器:FPGA开发板一块,计算机一台。
verilogCPLD流水灯课程设计
verilogCPLD流水灯课程设计一、课程目标知识目标:1. 学生理解Verilog HDL基本语法和结构,掌握CPLD的基本原理和使用方法。
2. 学生能够描述流水灯的工作原理,并运用Verilog HDL编写程序实现流水灯的功能。
3. 学生了解数字电路设计中时序控制的重要性,并掌握基本时序电路的设计方法。
技能目标:1. 学生能够使用Verilog HDL进行基本程序编写,具备CPLD程序烧录和调试的能力。
2. 学生通过课程实践,培养动手操作能力,提高问题解决能力。
3. 学生能够运用所学知识,进行小组合作,完成流水灯课程的综合性设计。
情感态度价值观目标:1. 学生培养对电子设计的兴趣,增强学习主动性和积极性。
2. 学生在课程实践中,培养团队合作精神,提高沟通与协作能力。
3. 学生认识到电子技术在日常生活中的应用,激发创新意识和实践欲望。
课程性质:本课程为电子技术实践课程,以培养学生的实际操作能力和综合设计能力为主。
学生特点:学生已具备一定的电子技术基础知识,对Verilog HDL和CPLD有一定了解,但实际操作能力有待提高。
教学要求:结合学生特点,注重理论与实践相结合,提高学生的动手能力和创新意识。
在教学过程中,强调团队合作,培养学生沟通协作能力。
通过课程目标的实现,使学生能够独立完成流水灯的设计与实现。
二、教学内容1. Verilog HDL基础语法与结构复习:重点回顾数据类型、运算符、控制语句等基本概念,确保学生能够熟练运用Verilog进行编程。
教材章节:第二章Verilog HDL基础2. CPLD基本原理与使用方法:介绍CPLD的内部结构、工作原理以及编程方法,使学生了解并掌握CPLD的基本使用。
教材章节:第三章CPLD/FPGA原理与应用3. 流水灯工作原理与设计:详细讲解流水灯的工作原理,分析设计思路,指导学生进行Verilog程序编写。
教材章节:第四章数字电路设计实例4. 时序控制与基本时序电路设计:探讨时序控制的重要性,教授基本时序电路的设计方法,为流水灯设计提供技术支持。