跑马灯VHDL
Verilog HDL 跑马灯电路

实验二跑马灯电路一、实验目的和要求1、学习使用加减法电路的编程方法和调试步骤2、学习使用分频电路的编程方法和调试步骤3、写出调试通过的实验程序4、分析实验结果二、实验仪器1、计算机2、FPGA开发板三、实验内容(包括必要的步骤、原理,如状态图等)1、使用Verilog HDL编写半加器、半减器电路实验程序,在仿真器上调试运行2、编写分频电路程序代码3、完成跑马灯电路的程序代码,并调试分析结果跑马灯程序代码:➢创建新的项目:[File]->[New Project] 选择器件属性➢创建源文件:[Project]->[New Source]->Verilog Module 输入跑马灯程序代码(上图所示)➢设计综合:使用ISE自带的综合工具XST 检查程序是否有误➢调试仿真波形仿真✓创建测试矢量波形文件:[Project]->[New Source]->Test Bench Waveform✓初始化输入波形✓启动ModelSim进行行为仿真➢设计实现✓启动设计实现:[Implement Design]✓可以在布局规划器(Floorplanner)中查看设计布局:[Place & Route]->[View/Edit Placed Design(Floorplanner)]➢下载调试将Verilog程序完成的电路配置到芯片里,并让芯片运行,观察并调试结果四、实验结果(说明实验的结果显示,最好包括波形和文字的)五、小结(对实验的心得,以及在试验中碰到的问题,你是如何解决这个问题的)➢ 进行软件仿真时要注意源程序代码的修改✓ if(count==25000000) 把数值设的小一点,比如令count=5,不然在短的时间内是看不到仿真效果的。
✓ if(!rst)begincount<=0;newclk<=0; end 在不能同时进行阻塞性赋值和非阻塞性赋值,不然程序会出现错误。
跑马灯设计 说明

基于VHDL的跑马灯设计说明1.设计思路:通过给定系统一个时钟,来控制8个LED灯的亮暗,灯亮暗的快慢可以通过改变给定的系统时钟频率。
2.功能分析:通过一个中间变量flag的状态来改变灯亮暗的方式,此次设计灯亮暗的方式总共有3种:(1)灯从左到右依次点亮,然后再从右到左依次熄灭;(2)灯从中间2个开始向两边亮,然后再从两边向中间熄灭;(3)灯按照7…4,3…0亮,其中最初7和3 亮,然后6和2亮…..以此类推,最后全部熄灭,进入下一轮循环。
3.模式选择:选择的为模式5。
4. 引脚锁定如下:灯对应实验板上从左到右为:light7,light6,……light0;Clk1对应实验板上clock05. 程序说明:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity light isport(clk1: in std_logic; --系统给的时钟light: buffer std_logic_vector(7 downto 0));end light;architecture behv of light isconstant len: integer:=7; --定义一个常量signal banner: std_logic:='0'; --中间信号signal clk,clk2: std_logic;beginclk<=(clk1 and banner) or (clk2 and not banner);process(clk1)beginif clk1'event and clk1='1' then --clk1是上升沿时,clk2取反clk2<=not clk2;end if;end process;process(clk)variable flag: bit_vector(2 downto 0):="000";--定义一个状态变量flag;beginif clk'event and clk='1' then --clk是上升沿if flag="000" then --flag为000时,从左到右点亮light<='1' & light(len downto 1); --并置成8位if light(1)='1' then --状态变量flag改变flag:="001";end if;elsif flag="001" then -- flag为001时,从右到左熄灭light<=light(len-1 downto 0) & '0';if light(6)='0' thenflag:="010";end if;elsif flag="010" then -- flag为010时,从中间向两边点亮light(len downto 4)<=light(len-1 downto 4)&'1';light(len-4 downto 0)<='1'&light(len-4 downto 1);if light(1)='1' thenflag:="011";end if;elsif flag="011" then -- flag为011时,从两边向中间熄灭light(len downto 4)<='0'&light(len downto 5);light(len-4 downto 0)<=light(len-5 downto 0)&'0';if light(2)='0' thenflag:="100";end if;elsif flag="100" then -- flag为100时,按7,3先亮,6,2再亮…..light(len downto 4)<='1'&light(len downto 5);light(len-4 downto 0)<='1'&light(len-4 downto 1);if light(1)='1' thenflag:="101";end if;elsif flag="101" then -- flag为101时,全部熄灭light<="00000000";flag:="110";elsif flag="110" then --进入下一轮循环banner<=not banner;flag:="000";end if;end if;end process;end behv;注:以上是自己通过看书和向同学请教后对程序的理解,可能有不当之处,望老师可以进行指出,十分感谢。
四种亮灯方式自由切换的跑马灯(用veriloghdl语言编写的跑马灯程序)

四种亮灯方式自由切换的跑马灯(用veriloghdl语言编写的跑马灯程序)//产生四种亮灯方式的跑马灯module zmk(mclk,reset,type,ledout);input mclk,reset;input[1:0] type;output [5:0] ledout;reg [5:0] ledout;reg [24:0] count;reg [4:0] state;wire clk;//分频器always@(posedge mclk)count=count+1;assign clk=count[23];//当type变化的时候对state进行清零reg[1:0] type_delay;wire type_change;always @ (posedge clk)type_delay <= type;assign type_change=(type!=type_delay)?1:0;always @ (posedge clk )beginif(reset==0) //初始化语句begin ledout=6'b000000;state<=0;endelseif(type_change)//对state进行清零state<=4'b1;elsebegincase(state)4'b0001:ledout=6'b011111;//第一个灯亮4'b0010:ledout=6'b101111;//第二个灯亮4'b0011:ledout=6'b110111;//第三个灯亮4'b0100:ledout=6'b111011;//第四个灯亮4'b0101:ledout=6'b111101;//第五个灯亮4'b0110:ledout=6'b111110;//第六个灯亮4'b0111:ledout=6'b111101;//第五个灯亮4'b1000:ledout=6'b111011;//第四个灯亮4'b1001:ledout=6'b110111;//第三个灯亮4'b1010:ledout=6'b101111;//第二个灯亮default :ledout=6'b000000;endcasestate=state+1; //计数器产生state的各种状态if(state==4'b1011)state=5'b00001;endelseif(type==2'b01)begincase(state)4'b0001:ledout=6'b101010;4'b0010:ledout=6'b010101;default :ledout=6'b000000;endcasestate=state+1;if(state==4'b0011)state=5'b00001;endelsebegincase(state)4'b0001:ledout=6'b110011;4'b0010:ledout=6'b101101;4'b0011:ledout=6'b011110;4'b0100:ledout=6'b101101; default :ledout=6'b000000; endcasestate=state+1;if(state==4'b0101)state=5'b00001; endelseif(type==2'b11)begincase(state)5'b00001:ledout=6'b111110;5'b00010:ledout=6'b111101;5'b00011:ledout=6'b111011;5'b00100:ledout=6'b110111;5'b00101:ledout=6'b101111;5'b00110:ledout=6'b011111;5'b00111:ledout=6'b001111;5'b01000:ledout=6'b010111;5'b01001:ledout=6'b011011;5'b01010:ledout=6'b011101;5'b01011:ledout=6'b011110;5'b01100:ledout=6'b011100;5'b01101:ledout=6'b011010;5'b01110:ledout=6'b010110;5'b01111:ledout=6'b001110;5'b10000:ledout=6'b000110;5'b10001:ledout=6'b001010;5'b10010:ledout=6'b001100;5'b10011:ledout=6'b001000;5'b10100:ledout=6'b000100;5'b10101:ledout=6'b001000;5'b10110:ledout=6'b000000;5'b10111:ledout=6'b111111;5'b11000:ledout=6'b000000;5'b11001:ledout=6'b111111;5'b11010:ledout=6'b000000;default :ledout=6'b000000;endcasestate=state+1;if(state==5'b11011)state=5'b00001; end endendmodule。
EDA实验 跑马灯

实验题目:跑马灯设计一、设计任务:设计8个LED进行花式显示,设计4种显示模式:1、从左到右逐个点亮LED;2、从右到左逐个点亮LED;3、从两边到中间逐个点亮LED;4、从中间到两边逐个点亮LED。
使得四种模式循环切换,由复位键rst控制系统的运行与停止。
二、实验过程⒈设计思路:分析该题目出现的所有状态,用“00000000”表示s0,“10000000”表示s1,“01000000”表示s2,“00100000”表示s3,“00010000”表示s4,“00001000”表示s5,“00000100”表示s6,“00000010”表示s7,“00000001”表示s8,“10000001”表示s9,“01000010”表示s10,“00100100”表示s11,“00011000”表示s12,另外定义了一个中间变量pp,用来表示该种状态的下一个状态为何,用来满足四种状态模式的连接操作。
在程序的结构体中编写两种进程,时序进程和组合进程,它们分别用来控制时钟、复位等时序信息和具体的状态转换关系。
根据状态转换图,对每一种状态编写下一项的确定状态,用pp来引导。
同时在适当的位置,进行pp值的定义变化,分别是“00000000”、“10000000”、“00000001”、“00011000”、“10000001”。
⒉设计方案:将列写出的状态转换图用VHDL语言表达出来,设计好相应的输入输出端口及功能过程,进行设计处理,编译文件,修改其中的错误,再用波形图进行编辑仿真描述,以便检查其功能是否正确,最后下载链接到硬件设备上检查其功能。
⒊设计步骤:(1)用VHDL语言设计实现计数器:运行QuartusII软件,选择菜单File/New Project Wizard...,新建一个项目,选择cyclone系列的芯片;在此项目下新建VHDL文件,编写计数器代码:library ieee;use ieee.std_logic_1164.all;entity test3 isport(clk, reset,stop : in std_logic;qout : buffer std_logic_vector(7 downto 0));end test3;architecture be of test3 istype fsm_st is(s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12);signal current_state, next_state : fsm_st;signal pp : std_logic_vector(1 downto 0);beginreg : process(reset, clk)beginif reset = '1' then current_state <= s0;elsif rising_edge(clk) thencurrent_state <= next_state;end if;end process;com : process(current_state, reset)begincase current_state iswhen s0 => qout <= "00000000";if( reset ='0' and stop='0') then next_state <= s1; pp <= "00"; end if;when s1 => qout <= "10000000";if (pp = "00" and stop='0') then next_state <= s2;elsif (pp = "01" and stop='0')then next_state <= s9; pp <= "10"; end if;when s2 => qout <= "01000000";if (pp = "00" and stop='0')then next_state <= s3;elsif (pp = "01" and stop='0')then next_state <= s1;end if;when s3 => qout <= "00100000";if (pp = "00" and stop='0') then next_state <= s4;elsif (pp = "01" and stop='0')then next_state <= s2;end if;when s4 => qout <= "00010000";if (pp = "00" and stop='0')then next_state <= s5;elsif( pp = "01" and stop='0')then next_state <= s3;end if;when s5 => qout <= "00001000";if( pp = "00" and stop='0')then next_state <= s6;elsif (pp = "01" and stop='0')then next_state <= s4;end if;when s6 => qout <= "00000100";if (pp = "00" and stop='0')then next_state <= s7;elsif( pp = "01" and stop='0')then next_state <= s5;end if;when s7 => qout <= "00000010";if (pp = "00" and stop='0')then next_state <= s8;elsif (pp = "01" and stop='0')then next_state <= s6;end if;when s8 => qout <= "00000001";if (pp = "00" and stop='0')then next_state <= s7; pp <= "01"; end if;when s9 => qout <= "10000001";if (pp = "10" and stop='0')then next_state <= s10;elsif (pp = "11" and stop='0')then next_state <= s1; pp <= "00"; end if;when s10 => qout <= "01000010";if (pp = "10" and stop='0')then next_state <= s11;elsif (pp = "11" and stop='0')then next_state <= s9;end if;when s11 => qout <= "00100100";if (pp = "10" and stop='0')then next_state <= s12;elsif (pp = "11" and stop='0')then next_state <= s10;end if;when s12 => qout <= "00011000";if (pp = "10" and stop='0') then next_state <= s11; pp <= "11"; end if;when others => null;end case;end process;end be;(2)将此文件进行编译.(3)新建一个vector waveform form波形图文件,设置为波形仿真。
实验报告 跑马灯

实验报告跑马灯实验报告:跑马灯引言:跑马灯作为一种常见的室内装饰和广告展示工具,广泛应用于商场、剧院、车站等公共场所。
本实验旨在探究跑马灯的工作原理和设计过程,并通过实际搭建跑马灯模型进行验证。
一、跑马灯的工作原理跑马灯是通过一组灯泡或LED灯组成的,它们按照一定的顺序依次亮灭,从而形成连续的动态效果。
跑马灯的工作原理主要包括电路控制和程序设计两个方面。
1. 电路控制:跑马灯的电路控制是通过继电器或集成电路实现的。
继电器是一种电磁开关,通过控制电磁铁的通断来控制灯泡的亮灭。
而集成电路则是通过逻辑门和计时器等元件实现灯泡的顺序控制。
2. 程序设计:跑马灯的程序设计是通过编写一段简单的代码来实现的。
在代码中,通过控制灯泡或LED灯的亮灭时间和顺序来实现跑马灯效果。
常见的程序设计语言如C、Python等都可以用来编写跑马灯的代码。
二、跑马灯的设计过程跑马灯的设计过程包括灯泡或LED灯的选型、电路设计、程序编写和外壳制作等步骤。
1. 灯泡或LED灯的选型:在跑马灯的设计中,选择合适的灯泡或LED灯是非常重要的。
灯泡的亮度、寿命和能耗等指标需要进行综合考虑。
而LED灯则具有节能、寿命长和颜色丰富等优点,因此在现代跑马灯设计中更加常见。
2. 电路设计:电路设计是跑马灯设计中的关键环节。
在电路设计中,需要考虑灯泡或LED灯的亮灭顺序、时间间隔和电源供应等因素。
通过合理的电路设计,可以实现跑马灯的稳定运行和灯泡的长寿命。
3. 程序编写:程序编写是跑马灯设计中的另一个重要环节。
通过编写一段简单的代码,可以控制灯泡或LED灯的亮灭顺序和时间间隔。
程序编写需要考虑灯泡或LED灯的数量和控制方式等因素,以实现预期的跑马灯效果。
4. 外壳制作:外壳制作是跑马灯设计中的最后一步。
通过设计和制作合适的外壳,可以保护电路和灯泡或LED灯,同时也可以增加跑马灯的美观性。
外壳的材料可以选择塑料、金属或木材等,根据实际需要进行选择。
跑马灯效果的实现

跑马灯效果的实现一能力拓展训练的内容和要求控制8个指示灯的循环点亮,包括指示灯控制、速度控制和点亮效果控制1.利用CPLD/FPGA器件实现简单的计算机逻辑接口电路(如地址译码电路、硬件加密电路等);2.基于可编程逻辑器件(CPLD或FPGA)实现DSP功能。
通过训练掌握相关的理论知识及实际处理方法,熟练使用常用EDA工具(如Quartus Ⅱ、Matlab/DSP Builder等)和硬件描述语言(如V erilog HDL等)设计所需应用程序、上机调试、模拟仿真、下载到目标芯片上运行验证,并对实验结果进行理论分析。
二设计思路:将8个彩灯共阴接地,阳极分别为EPIC3的8个I/O相连,I/O输出变化的电平来控制彩灯的点亮,流水灯分不同的时段,指示灯有不同的显示模式,开始时刻流水灯从右到左依次点亮,第二时间段LED流水灯从左向右依次熄灭,第三时间段LED流水灯从中间向两端依次点亮,第四时间段LED流水灯从中间到两边依次熄灭,第五时间段LED由1,4亮,然后2,5……以此类推,最后完成一次循环又回到开始时刻,进入第二轮循环,来实现LED流水灯的控制实验。
从LED流水灯的工作原理来看,无论是第一时间还是其他的时间段,LED流水灯点亮还是熄灭,都是一个频率来控制LED流水灯点亮和熄灭的快慢。
只不过这个频率可以在程序中控制,也可以在定义输入引脚时把频率选择不同的频率段。
三原理框图:(1)总体方框图如下:图1 总体方框图(2)细化框图:此次实验主要分两个大模块:控制模块以及功能模块,其中功能模块还有3个子模块,如下所示:图2 细化框图控制模块:主要是通过控制给定系统的时钟频率,可以改变灯亮暗的快慢。
功能模块:即为灯亮暗方式的选择。
四编写程序并仿真第一种方式波形图如下:图3第一个灯开始亮由上述仿真波形可知,仿真后所得的结果与希望的相同,进行下一步:对引脚的锁定。
图4 从左到右依次亮图5 从右向左依次熄灭第二种方式波形图:图6中间两个灯亮图7向两边扩散开来直至全亮图8从两边向中间熄灭第三种方式波形图:图91、4灯亮图101、4;2、5;3、6亮图11全亮后进入下一轮循环五引脚锁定以及功能预测各引脚锁定如下所示:图4 各引脚锁定图功能预测:当引脚锁定完成之后,再编译一次,然后进行下载,当下载完毕后可以发现试验箱上的灯会从左到右依次被点亮,然后又从右向左依次熄灭,之后灯从中间两个开始亮,向两边开始扩散,直至全亮后再从两边向中间逐次熄灭,然后就是灯会以1,4亮,2,5亮,3,6亮,4,7亮此种方式进行,当此次全亮之后,灯开始进入下一轮循环,从左到右依次点亮……如此反复。
基于VHDL跑马灯课程设计

目录一.设计任务与要求 (1)(1)方案论证 (1)(2)原理框图 (1)二.总体框图 (1)三.选择器件 (1)四.功能模块 (2)(1) 八分频模块 (2)(2) JK触发器连接的两位加法计数器 (2)(3) ROM32X8 (3)(4) 实现循环闪烁和模式切换的具体说明 (3)(5) 74LS283与7446组成模式显示电路 (5)(6) 仿真波形 (7)五.总体设计电路图 (7)六.设计心得 (14)课程设计一.设计任务与要求1.在八个LED灯上实现从左至右,从右至左,从两边到中间,从中间到两边;四种模式的闪烁。
2.四种模式是事先设置的。
3.实现四种模式的手动切换。
二.总体框图(1)方案论证:本方案采用一片74LS293与两片JK触发器。
74LS293是4位异步二进制加法计数器。
本方案采用它的八分频功能,构成一个八进制循环电路。
并且将两个JK触发器连接成一个两位加法器且由手动开关输入时钟沿。
两部分组合起来实现每种模式的地址线依次循环导通以及四种模式的切换。
用一片ROM32X8来存储四种闪烁模式。
输出连接八个LED灯。
用74LS283与7446连接成显示电路,在实验板上的七段数码管显示模式的编号。
(2)原理框图:图1——原理框图三.选择器件1.主芯片:Altera®的Cyclone EPEC12Q240C82.八个LED灯3.一个自动反弹开关4.EDA实验箱一台5.含有QuartusⅡ软件的计算机一台6.导线若干四.功能模块(1)八分频模块图二——74LS293模块A实现的是一位二进制循环。
B,C,D实现的是三位八进制循环。
本设计使用B,C,D端。
在CLKB加时钟信号后,BCD端实现八进制循环。
内部原理图如下:图三——74LS293内部结构图八分频模块电路图:图四——八分频模块仿真波形:图五——仿真波形分析:CLRA,CLRB为清零信号端,全部接地使失效。
时钟信号输入端CLKA控制QA计数。
FPGA入门系列实验教程——跑马灯

FPGA入门系列实验教程——LED跑马灯1.实验任务让实验板上的8个LED实现跑马灯的功能。
通过这个实验,进一步掌握采用计数与判断的方式来实现分频的Verilog HDL的编程方法以及移位运算符的使用。
2.实验环境硬件实验环境为艾米电子工作室型号EP2C8Q208C8增强版开发套件。
软件实验环境为Quartus II8.1开发软件。
3.实验原理从LED[0]到LED[7]依次点亮,第二个灯点亮时第一个熄灭,每个灯交换的时间为0.5S;看上去的效果就象一个亮点从LED[0]跑向LED[7],然后重复此循环,故命名跑马灯。
初始状态时,LED[0]亮,其余熄灭。
每来一个时钟脉冲CLK,计数器就加1。
每当判断出计数器中的数值达到25000000时,就会点亮LED[1],同时LED[0]熄灭,并进行移位。
这样,依次点亮所有的灯,就形成了跑马灯。
而当LED[7]点亮时,需要一个操作使得恢复为初始状态,即:LED[0]亮,其余熄灭。
然后,再进行一次跑马灯,重复此循环。
如果是右移位,就出现向右跑马的现象;反之,向左跑马。
4.实验程序module ledwalk(led,clk);input clk;output[7:0]led;reg[7:0]led_out;reg[25:0]buffer;always@(posedge clk)beginbuffer<=buffer+1'b1;if(buffer==26'd2*******)beginled_out=led_out<<1;if(led_out==8'b00000000)led_out=8'b00000001;endendassign led=led_out;endmodule5.实验步骤(1)建立新工程项目:打开Quartus II软件,进入集成开发环境,点击File→New project wizard建立一个工程项目ledwalk。
【Easy CPLD570】Verilog实现跑马灯

Verilog实现跑马灯1 原理图共8个LED灯,每个灯采用一个IO驱动,高电平点亮。
2 CPLD代码module LED_lamp (clk_24m,reset_n,Bit_line //LED点灯控制IO。
);input wire clk_24m;input wire reset_n;output wire [7:0] Bit_line; //8位信号线,对应8个LED灯。
/******************************************************************************24M时钟分频,用于内部控制及计数等。
******************************************************************************/ reg [16:0] count_div1;wire condition_183; //183 Hz时钟信号。
always @ (posedge clk_24m or negedge reset_n)beginif(reset_n == 1'b0)count_div1 <= 16'h00000;elsecount_div1 <= count_div1 + 16'h00001;end/****************************************************************************** condition_183:183Hz时钟信号,高电平持续一个24MHz时钟周期,其余时间为低电平。
******************************************************************************/ assign condition_183 = &count_div1[16:0]; //24MHz/2^17=183Hz。
dxp课程设计跑马灯

dxp课程设计跑马灯一、课程目标知识目标:1. 学生能理解跑马灯的基本概念,掌握跑马灯电路的组成和工作原理。
2. 学生能够运用所学知识,设计并搭建一个简单的跑马灯电路。
3. 学生能够解释跑马灯电路中各元件的功能及其相互关系。
技能目标:1. 学生能够运用所学知识,进行电路图的绘制和电路搭建。
2. 学生能够通过实际操作,掌握基本的电路故障排查和解决方法。
3. 学生能够通过团队合作,共同完成跑马灯项目的设计与实现。
情感态度价值观目标:1. 学生培养对电子技术的兴趣,激发学习科学技术的热情。
2. 学生通过实践操作,增强动手能力,提高解决问题的自信心。
3. 学生在团队合作中,学会相互尊重、沟通协作,培养集体荣誉感。
课程性质:本课程为实践性较强的电子技术课程,旨在让学生通过实际操作,掌握跑马灯电路的基本原理和设计方法。
学生特点:考虑到学生所在年级的特点,课程内容以直观、易懂为主,注重培养学生的动手能力和团队协作能力。
教学要求:教师需结合课程内容和学生的实际情况,采用启发式教学,引导学生主动探索、发现问题,并在实践中解决问题。
同时,注重培养学生的安全意识,确保实践操作的安全性。
通过课程学习,使学生达到上述课程目标,为后续相关课程的学习打下坚实基础。
二、教学内容本课程教学内容围绕跑马灯电路的设计与实现展开,主要包括以下几部分:1. 跑马灯基础知识:- 跑马灯概念及其应用场景- 跑马灯电路的组成与工作原理2. 电路元件功能与选型:- 常用电子元件的认识(如电阻、电容、二极管、三极管等)- 元件在跑马灯电路中的作用及选型3. 跑马灯电路设计与搭建:- 电路图的绘制方法- 电路搭建的步骤与注意事项- 跑马灯程序设计基础4. 实践操作与故障排查:- 跑马灯电路的实际操作演练- 常见故障现象及排查方法5. 团队合作与项目实施:- 项目分组及任务分配- 团队协作完成跑马灯设计与搭建- 项目展示与评价教学内容依据教材相关章节进行组织,确保科学性和系统性。
实验 5.2 跑马灯实验

实验5.2 跑马灯实验·实验说明在FPGA 实验板上用VHDL 语言或者Verilog语言都能够很快地写出跑马灯实验程序。
本实验要求完成的是基于SOPC 的跑马灯设计,具有一定的操作复杂性。
·实验步骤5.2.1建立Quartus 工程1.新建Quartus 工程RunningLED,顶层实体名RunningLED。
2.重新设置编译输出目录为../ RunningLED/release。
5.2.2建立SOPC系统3.点击Quartus II 软件右上方图标打开SOPC Builder,创建一个SOPC 系统。
填写系统名称为RinningLED_System,并指定VHDL 为描述系统的语言,如图5-23。
图5-23 添加系统名称并指定语言4.在系统上添加On-Chip Memory在程序左侧列表中选择Memory and Memory Controllers -> On-Chip -> On-Chip Memory (RAM or ROM),双击添加至系统中。
在弹出的对话框中指定片上RAM 的属性,因为不需要显示,编译结果很小,保持默认即可。
图5-24 指定On-Chip Memory 属性鼠标移动到片内存储器的名称onchip_memonry2.0上并点击右键,在弹出菜单中选择Rename,然后更改名称为onchip_mem。
5.添加Nios II Processor双击Altera SOPC Builder -> Nios II Processor,在弹出的对话框中间选择处理器NIOS II/s;硬件乘法器(Hardware Multiply)选择None,即不需要硬件乘法器;复位向量和异常向量存储器(Memory)均选择前面刚刚添加的片内存储器onchip_mem,此时二者的偏移量(Offset)自动设置为0x0和ox20。
复位向量是指整个系统软件复位后启动的程序地址,一般为非易失存储器。
跑马灯的设计doc

EDA 课程设计报告书课题名称 跑马灯的设计 姓 名 杨婷婷 学 号 0812202-33 院 系 物理与电信工程系 专 业 电子信息工程 指导教师曾专武 讲师2011年 6月10日※※※※※※※※※ ※※※※ ※※※※※※※※※※※2008级学生EDA 课程设计跑马灯的设计1设计目的系统设计采用自顶向下的设计方法,使用简单的EDA程序实现跑马灯显示效果设计。
并且熟悉可编程逻辑器件的使用,通过制作来了解跑马灯控制系统。
2 设计的主要内容和要求2.1.实现8个红色LED的亮、灭、交错显示等,其显示如下(1)复位时,8个灯全灭;(2)从左到右第一个开始亮,依次亮到最后一个;(3)从右到左第一个开始亮,依次亮到最后一个;(4)从中间亮到两边;(5)从两边亮到中间;2.2.随着彩灯显示图案的变化,发出不同的音响声。
3 整体设计方案这次的跑马灯设计采用的是分模块来完成的,包括分频器、计数器、选择器、彩灯控制器。
其中彩灯控制器是用来输出不同的花样,彩灯控制器的输出则是用一个32进制的计数器来控制,扬声器的输出时用不同的频率来控制,所以用了一个集成分频器来使输入的频率被分为几种不同的频率,不同频率的选择性的输出则是用一个4选一的选择器来控制。
图3.1跑马灯的输出原理方框图图3.2扬声器输出原理方框图4硬件电路的设计与软件设计4.1集成分频器模块1)设计要求显示不同的跑马灯的时候要伴随不同的音乐,所以设计分频器来用不同的频率控制不同的音乐输出。
模块说明:Rst:输入信号复位信号用来复位集成分频器的输出使输出为“0”,及没有音乐输出。
Clk:输入信号模块的功能即为分频输入的频率信号。
Clk_4、clk_6、clk_8、clk_10:输出信号即为分频模块对输入信号clk的分频,分别为1/4分频输出、1/6分频输出、1/8分频输出、1/10分频输出。
图4.1集成分频器2)分频器VHDL程序编写及仿真结果LIBRARY ieee;USE ieee.std_logic_1164.all; -- IEEE库使用声明ENTITY fenpinqi IS -- 实体端口声明PORT(clk,rst : IN std_logic; -- 类型的输入端口clk_10,clk_4,clk_6,clk_8: OUT std_logic); -- 输出口END fenpinqi;ARCHITECTURE cd OF fenpinqi IS --结构体功能描述语句beginp1:process(clk,rst) --进程语句variable a:integer range 0 to 20;beginif rst='1' thenclk_4<='0'; ---复位信号控制部分elseif clk'event and clk='1'then --时钟信号clk,上升沿有效边沿if a>=3 then a:=0; --当a大于等于3时,则a等于0 clk_4<='1';elsea:=a+1; --否则a等于a加1clk_4<='0';end if;end if;end if;end process p1;p2:process(clk,rst)variable b:integer range 0 to 20;beginif rst='1' thenclk_6<='0'; ----- 复位信号控制部分elseif clk'event and clk='1'thenif b>=5 thenclk_6<='1';elseb:=b+1;clk_6<='0';end if;end if;end if;end process p2;p3:process(clk,rst)variable c:integer range 0 to 20;beginif rst='1' thenclk_8<='0'; ----- 复位信号控制部分elseif clk'event and clk='1'thenif c>=7 thenc:=0;clk_8<='1';elsec:=c+1;clk_8<='0';end if;end if;end if;end process p3; --关闭进程p4:process(clk,rst) --开启另外一个进程variable d:integer range 0 to 20; --定义d为变量beginclk_10<='0'; ----- 复位信号控制部分elseif clk'event and clk='1'thenif d>=9 thend:=0;clk_10<='1';elsed:=d+1;clk_10<='0';end if;end if;end if; end process p4; end cd;图4.2 集成分频器仿真波形4.2 32进制计数器模块1)32进制模块用来控制彩灯输出模块,即确定跑马灯控制器的不同的输出。
51单片机跑马灯程序编程高四位亮

51单片机跑马灯程序编程高四位亮51单片机是一种非常常用的微控制器,它具有强大的功能和广泛的应用领域。
跑马灯是一种非常简单且常见的程序,可以用来展示LED灯在一组灯中依次亮起的效果。
在51单片机中实现跑马灯程序,可以通过控制IO口的状态来控制LED的亮灭。
假设我们有8个LED灯,要实现高四位亮的跑马灯效果,可以按照以下步骤进行编程:1. 首先,需要定义8个IO口作为LED灯的控制口。
假设我们将P0口的高四位作为控制LED的口,可以通过以下代码进行定义:```sbit LED1 = P0^4;sbit LED2 = P0^5;sbit LED3 = P0^6;sbit LED4 = P0^7;```2. 在主函数中,需要设置IO口的工作模式。
由于我们要控制LED亮灭,需要将相应的IO口设置为输出模式,可以通过以下代码实现:```LED1 = LED2 = LED3 = LED4 = 0; // 初始化为低电平P0M0 = P0M1 = 0; // P0口设置为推挽输出模式```3. 接下来,可以编写一个循环来实现跑马灯效果。
在每一次循环中,将高四位中的一个LED口设置为高电平,其他的LED口设置为低电平,通过不断循环改变高四位LED口的状态,从而实现跑马灯效果。
可以通过以下代码实现:```while (1) {LED1 = 1; // 第一个LED口亮LED2 = 0; // 其他LED口灭LED3 = 0;LED4 = 0;Delay(500); // 延时一段时间,控制灯的亮灭速度LED1 = 0; // 第一个LED口灭LED2 = 1; // 第二个LED口亮LED3 = 0;LED4 = 0;Delay(500);// 依次类推...}```通过以上代码,就可以在51单片机上实现高四位亮的跑马灯效果。
通过改变循环中的延时时间,还可以调节灯的亮灭速度。
此外,还可以通过调节亮灭的顺序,改变跑马灯的效果,使其更加多样化。
实验37跑马灯设计

实验37 跑马灯设计一、实验目的1. 学习VHDL程序的基本设计技巧;2. 学习状态机的设计技巧;二、实验仪器和设备三、实验原理1.彩灯(二极管)发光原理图2.37.1 LED小灯显示模块图2.37.1为KH-31001 实验箱上显示模块,发光二极管(LED)是一种由磷化镓(GaP)等半导体材料制成的、能直接将电能转变成光能的发光显示器件。
当其内部有一定电流通过时,它就会发光。
发光二极管也与普通二极管一样由PN结构成,也具有单向导电性。
它广泛应用于各种电子电路、家电、仪表等设备中、作电源指示或电平指示。
2.状态机简介状态机是一个有向图形,由一组节点和一组相应的转移函数组成。
状态机通过响应一系列事件而“运行”。
每个事件都在属于“当前” 节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。
函数返回“下一个”(也许是同一个)节点。
这些节点中至少有一个必须是终态。
当到达终态,状态机停止。
状态机包含一组状态集(states)、一个起始状态(start state)、一组输入符号集(alphabet)、一个映射输入符号和当前状态到下一状态的转换函数(transition function)的计算模型。
当输入符号串,模型随即进入起始状态。
它要改变到新的状态,依赖于转换函数。
在有限状态机中,会有有许多变量,例如,状态机有很多与动作(actions)转换(Mealy机)或状态(摩尔机)关联的动作,多重起始状态,基于没有输入符号的转换,或者指定符号和状态(非定有限状态机)的多个转换,指派给接收状态(识别者)的一个或多个状态等等。
3.控制8个LED进行花式显示,设计四种显示模式:1. 从左到右逐个点亮LED;2.从右到左逐个点亮LED;3.从两边到中间逐个点亮LED;4. 从中间到两边逐个点亮LED 。
四种模式循环切换,如图2.37.2所示,由KH-31001实验箱上左下侧键盘附近的拨码开关SW3的“I01”来控制系统的运行与停止,当“I01”拨到“ON ”位置时系统运行,当“I01”拨到“OFF ”位置时系统停止。
verilog HDL跑马灯报告

跑马灯设计一、实验目的:1.熟悉利用QuartusII开发数字电路的基本流程和QuartusII软件的相关操作;2.掌握基本的设计思路,软件环境参数配置,仿真,管脚分配,利用JTAG/AS进行下载的基本操作;3.了解VerilogHDL语言设计或原理图色剂方法。
二、设计内容使LED成流水的方式,在不同的状态中间进行转换,本设计中主要是让LED显示灯按照一定时间间断来显示,通过这样的间隔来使LED按流水方式显示并循环。
三、实验用到的软件和器材软件:QuartusII软件硬件:实验开发板,计算机四、实验步骤1. 创建工程,选择目标芯片,设置合适的参数,编写设计程序并编译。
源程序如下:module led#(parameter max_length=8)(input clk,rst,output reg[max_length-1:0]led_out);always@(posedge clk,posedge rst)if(rst)led_out<={max_length{1'b0}};elseif(led_out=={max_length{1'b1}})led_out<={max_length{1'b0}};elseled_out<={1'b1,led_out[max_length-1:1]};endmodule2. 编译无误后进行时序仿真,仿真无误后管脚锁定。
管脚锁定图如下:3 .将程序下载至EP1C6+EPCS1 试验箱,观察实验结果。
实验箱上LED灯按照一定的时间间隔顺次点亮,按流水方式显示并循环。
跑马灯

VHDL语言Led跑马灯效果四种模式:S0,S1,S2,S3分别是从左往右,从右往左,从两边向中间,从中间向两边。
下面的代码,你要是看不懂,那几就别学这个了,这是最简单的代码。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity led isport(clk:instd_logic;rst:instd_logic;q:out std_logic_vector(7 downto 0));end;architecture one of led istype states is(s0,s1,s2,s3);signal present:states;--present表示当前状态signal q1:std_logic_vector(7 downto 0);signalcount:std_logic_vector(3 downto 0);beginprocess(clk,rst)beginifrst='1' thenpresent<=s0;q1<=(others=>'0');elsifclk'event and clk='1' thencase present iswhen s0=>if q1="00000000" thenq1<="10000000";elseif count="0111" thencount<=(others=>'0');q1<="00000001";present<=s1;--当亮到最后一盏灯,把当前状态给S1。
else q1<=q1(0)&q1(7 downto 1);count<=count+1;present<=s0;end if;end if;when s1=>if count="0111" thencount<=(others=>'0');q1<="10000001";present<=s0;else q1<=q1(6 downto 0)&q1(7);count<=count+1;present<=s1;end if;when s2=>if count="0111" thencount<=(others=>'0');q1<="00011000";present<=s3;else q1(7 downto 4)<=q1(4)&q1(7 downto 5);q1(3 downto 0)<=q1(2 downto 0)&q1(3);count<=count+1;present<=s2;end if;when s3=>if count="0111" thencount<=(others=>'0');q1<="10000000";present<=s3;else q1(7 downto 4)<=q1(6 downto 4)&q1(7);q1(3 downto 0)<=q1(0)&q1(3 downto 1);count<=count+1;present<=s3;end if;end case;end if;end process;q<=q1;end;。
VHDL实现走马灯的程序

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY light ISPORT(cp,co: IN STD_LOGIC;finalout: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END light;ARCHITECTURE arch OF light ISTYPE all_state IS (S0,S1,S2,S3,S4);SIGNAL state: all_state;SIGNAL a: STD_LOGIC;SIGNAL lightout:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL clk: STD_LOGIC;SIGNAL clk_tmp: STD_LOGIC;signal cnt : integer range 0 to 24999999;BEGINprocess(cp)beginif (cp'event and cp='1') thenif cnt=24999999 thencnt<=0;clk_tmp<= not clk_tmp;elsecnt<=cnt+1;end if;end if;end process;clk<=clk_tmp;PROCESS(clk,co)BEGINIF(clk'event and clk='1' and co='0') THENCASE lightout ISWHEN "10000000"=>lightout<="01000000";WHEN "01000000"=>lightout<="00100000";WHEN "00100000"=>lightout<="00010000";WHEN "00010000"=>lightout<="00001000";WHEN "00001000"=>lightout<="00000100";WHEN "00000100"=>lightout<="00000010";WHEN "00000010"=>lightout<="00000001";WHEN "00000001"=>lightout<="10000000";WHEN OTHERS=>lightout<="10000000";END CASE;ELSIF(clk'event and clk='1' and co='1') THENCASE state ISWHEN S0=>state<=S1; lightout<="00011000"; a<='0';WHEN S1=>IF(a='0') THEN state<=S2; lightout<="00111100";ELSIF(a='1') THEN state<=S0; lightout<="00000000";END IF;WHEN S2=>IF(a='0') THEN state<=S3; lightout<="01111110";ELSIF(a='1') THEN state<=S1; lightout<="00011000";END IF;WHEN S3=>IF(a='0') THEN state<=S4; lightout<="11111111";ELSIF(a='1') THEN state<=S2; lightout<="00111100";END IF;WHEN S4=>state<=S3; lightout<="01111110"; a<='1';END CASE;END IF;END PROCESS;finalout<=lightout;END arch;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、设计任务
控制8个led进行花式显示,设计四种显示模式:
1.从左到右逐个点亮led;
2.从右到左逐个点亮led;
3.从两边到中间逐个点亮led;
4.从中间到两边逐个点亮led;
四种模式循环切换,由复位键rst控制系统的运行与停止.
二、设计过程
根据系统设计要求,采用状态机进行设计,状态机具有四种状态,每种状态完成一种显示模式四种状态间使用case语句进行切换.
程序如下:
library ieee;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_1164.all;
entity pmd is
port( clk, rst: in std_logic;
y: buffer std_logic_vector(7 downto 0));
end pmd;
architecture behave of pmd is
type states is (state0, state1, state2, state3);
signal state: states;
begin
process (clk, rst)
begin
if rst='1' then
y<="00000000" ; state <= state0;
elsif (clk'event and clk='1') then
case state is
when state0 =>
if y="00000000" then y<="10000000";state <= state0;
elsif y="10000000" then y<="01000000";state <= state0;
elsif y="01000000" then y<="00100000";state <= state0;
elsif y="00100000" then y<="00010000";state <= state0;
elsif y="00010000" then y<="00001000";state <= state0;
elsif y="00001000" then y<="00000100";state <= state0;
elsif y="00000100" then y<="00000010";state <= state0;
elsif y="00000010" then y<="00000001";state <= state1;
end if;
when state1 =>
if y="00000001" then y<="00000010";state <= state1;
elsif y="00000010" then y<="00000100";state <= state1;
elsif y="00000100" then y<="00001000";state <= state1;
elsif y="00001000" then y<="00010000";state <= state1;
elsif y="00010000" then y<="00100000";state <= state1;
elsif y="00100000" then y<="01000000";state <= state1;
elsif y="01000000" then y<="10000000";state <= state2;
end if;
when state2=>
if y="10000000" then y<="10000001";state <= state2;
elsif y="10000001" then y<="01000010";state <= state2;
elsif y="01000010" then y<="00100100";state <= state2;
elsif y="00100100" then y<="00011000";state <= state3;
end if;
when state3=>
if y="00011000" then y<="00100100";state <= state3;
elsif y="00100100" then y<="01000010";state <= state3;
elsif y="01000010" then y<="10000001";state <= state3;
elsif y="10000001" then y<="00000000";state <= state0;
end if;
end case;
end if;
end process;
end behave;
对程序进行编译波形仿真如下:
配置设备下载到实验箱上仿真.
四、总结
本次实验是功能模块电路的设计,我选作的是跑马灯设计。
跑马灯状态比较多,根据要求选用状态机的设计方法,我选用四状态的状态机,每种状态代表了一种显示模式,四种模式内采用case语句进行切换,在模式内采用if循环语句进行循环,观察仿真结果,程序运行结果与设计思想一致.在本次实验中我虽然按照要求完成了电路的设计,但是程序思想仍然存在很多的不足之处,程序不够简洁,采用列举的方法列举跑马灯的所有状态使程序过于复杂,如果能采用移位寄存器来进行设计,将简化程序,但是在设计过程中存在了没有解决的问题,仍需要继续解决.。