控制灯亮灭的一个eda程序
library ieee;
use use 以上三条语句引入可用的函数库。
entity light is 定义实体,名为light
port (clk1: in std_logic; -程序仅有时钟信号这一个输入。
light: buffer std_logic_vector(7 downto 0));有8个标准矢量输出。
end light; 结束实体的定义。
architecture behv of light is 定义结构体。
constant len: integer:=7;
signal banner: std_logic:='0'; 定义信号banner为两种节拍转换信号。
signal clk,clk2: stc_logic; -信号clk,clk2作为辅助时钟。
begin
clk<=(clk1 and banner)or(clk2 and not banner); 信号输入的赋只用“《=输入信号或者是banner的两种节拍转换信号用clk1表示,或者是不是bunner用clk2表示。
process(clk1) 若信号类型属于是clk1则执行此程序。
beginif clk1'event and clk1='1'then 若clk1出现上升沿。
clk2<=not clk2; 则clk2 二分频,得clk2
end if;
end process; 结束此进程。
---该进程是将clk1二分频,得clk2
process(clk) 若信号是普通时钟信号。
variable flag: bit_vector(2 downto 0):=00";
beginclk<=(clk1 and banner)or(clk2 and not banner);
if clk'event and clk='1'then
if flag="000"then
light<='1'&light(len downto 1); 顺序循环移位。
if light(1)='1'then --依次点亮。
flag:="001";
end if;
---当flag="000"时,依次点亮八盏灯,当最后一盏灯被点亮, -将"001"赋给flag,启动熄灭部分的程序。
else if flag="001"then
light<=light(len-1 downto 1)&'0';
if light(6)='1'then
flag:="010";
end if;
---当flag="001"时,即八盏灯被点亮后,逆向依次熄灭八盏---灯,当全部熄灭后,将"010"赋给flag
elsif flag="010"then
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'then
flag:="011";
end if;
---当flag="010"时,灯从中间向两边点亮。
elsif flag="011"then
light(len downto 4)<=0'&light(len downto 5);-奇偶位循 ;环点亮。
light(len-4 downto 0)<=light(len-5 downto 0)&'0';
if light(2)='1'then
flag:="100";
end if;
---当flag="011"时,灯是奇偶位循环点亮。
elsif flag="100"then
light(len downto 4)<=1'&light(len downto 5);
light(len-4 downto 0)<=1'&light(len-4 downto 1);
if light(1)='1'then
flag:="101"; 全部熄灭。
end if;
---当flag="101"时,灯全部熄灭。
elsif flag="101"then
light<="00000000"
flag:="110"; 重新开始。
elsif flag="110"then
banner<=not banner; -banner信号转换,实现第二种节拍。
flag:="000";
end if;
end if;
end process;
end behv;
程序定义了一个变量flag作为标志,实现了几种状态的启动和停止的转换。
2.实现结果及感受:
八盏灯先依次点亮,接着,逆向依次熄灭,然后,从中间向两边点亮,再奇偶位循环点亮,再全部熄灭,最后重新开始,实现下一次的循环。此程序中clk二分频部分看不懂,其他基本能看懂60%。基本就是重复利用 if flag="000"then light<='1'&light(len downto 1);if light(1)='1'then --flag:
="001";这几条关键语句使灯按一定次序实现亮灭。
EDA作业
电子电路基础 eda作业。multisim的应用之晶体管放大器的设计与调测。本实验的主要目的是熟悉multisim软件的使用,包括电路图编辑,虚拟仪器仪表的使用和掌握常见电路分析方法。能够运用multisim软件对模拟电路进行设计和性能分析,掌握eda设计的基本方法和步骤。熟练掌握有关单级放大电路有...
EDA作业
山东交通学院。eda电路 设计软件。设计报告。班级电气111 姓名罗汉林。学号 110812135 专业电气工程及其自动化 学院信电学院。简易频率计数器的设计。设计说明。频率的测量实际上就是在1个单位时间内 通常1s 对信号脉冲进行计数,计数值就是信号频率。1.设计目标。用at89s51设计一个数显...
eda作业
eda综合作业。1 任务 设计vhdl模块,输入模块的时钟信号为50mhz,输出如以下参数的信号 周期为22.6us,占空比为75 2 方案 输入的信号周期t 1 50m 0.02us,输出的21.5us的信号用计数器来实现,并且占空比为75 那么。输出信号的低电平范围 t1 22.6 25 5.6...