EDA 实验报告
实验一:组合电路的设计
实验内容是对2选1多路选择器VHDL 设计,它的程序如下:
ENTITY mux21a IS
PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a;
ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; BEGIN d <= a AND (NOT S) ; e <= b AND s ; y <= d OR e ;
END ARCHITECTURE one ;
Mux21a 仿真波形图
以上便是2选1多路选择器的VHDL 完整描述,即可以看成一个元件mux21a 。mux21a 实体是描述对应的逻辑图或者器件图,图中a 和b 分别是两个数据输入端的端口名,s 为通道选择控制信号输入端的端口名,y 为输出端的端口名。Mux21a 结构体可以看成是元件的内部电路图。最后是对仿真得出的mux21a 仿真波形图。
Mux21a 实体
Mux21a 结构体
实验二:时序电路的设计
实验内容D 触发器的VHDL 语言描述,它的程序如下:
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS
PORT (CLK : IN STD_LOGIC ; D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ;
ARCHITECTURE bhv OF DFF1 IS BEGIN PROCESS (CLK) BEGIN
IF CLK'EVENT AND CLK = '1' THEN Q <= D ; END IF; END PROCESS ;
END bhv;
D 触发器的仿真波形图
最简单并最具代表性的时序电路是D 触发器,它是现代可编程ASIC 设计中最基本的时序元件和底层元件。D 触发器的描述包含了VHDL 对时序电路的最基本和典型的表达方式,同时也包含了VHDL 中许多最具特色的语言现象。D 触发器元件如上图所示,其在max+plus2的仿真得出上面的波形
D 触发器
实验三:设计含异步清零和同步时钟使能的加法计数器
实验内容一个带有异步复位和同步时钟使能的十进制加法计数器,它的程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT10 IS
PORT (CLK,RST,EN:IN STD_LOGIC; CQ:OUT STD_LOGIC_VECTOR(3
DOWNTO 0);
COUT:OUT STD_LOGIC); END CNT10;
ARCHITECTURE behav OF CNT10 IS BEGIN
PROCESS(CLK,RST,EN)
VARIABLE CQI:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
IF RST='1'THEN CQI:=(OTHERS=>'0'); --计数器异步复位
ELSIF CLK'EVENT AND CLK='1' THEN --检测时
钟上升沿
IF EN='1'THEN --检测是否允许计算(同步使能)
IF CQI<9 THEN CQI:=CQI+1; --允许计数,检测是否小于9
ELSE CQI:=(OTHERS=>'0'); --大于9,计数值清零 END IF; END IF; END IF;
IF CQI=9 THEN COUT<='1'; --计数大于9,输出进位信号 ELSE COUT<='0'; END IF;
CQ<=CQI; --将计数值向端口输出 END PROCESS;
END behav;
加法计数器的工作时序
程序说明RST 是异步清信号,高电平有效;CLK 是锁存信号;D[3..0]是4位数据输入端。当EN 为'1'时,多路选择器将加1器的输出值加载于锁存器的数据端;当EN 为'0'时将"0000"加载于锁存器.
实验四:用原图输入法设计8位全加器
实验内容:完成半加器和全加器的设计。
实验目的:熟悉利用max+plus2的原理图输入方法设计简单组合电路,掌握层次化设计的方法。
半加器的原理图如下
半加器的时序仿真波形如下:
将半加器的原理图选择File中的Create Default Symbol项,此时即将当前文件变成了一个包装好的单一元件,并被放置在工程路径指定的目录中以备后用。
H_adder
一位全加器的VHDL描述,它的电路图如下
1位全加器的时序仿真波形如下
一位全加器可以由两个半加器和一个或门连接而成。
8位全加器设计原理图
八位全加器的波形仿真如上图
实验五:用原理图输入法设计较复杂数字系统
实验目的:熟悉原理图输入法中74系列等宏功能元件的使用方法,掌握更复杂的原理图层次化设技术和数字系统设计方法。
实验内容:完成2位十进制频率计的设计,并进行仿真测试,给出仿真波形。
实验原理图:
时序仿真波形图:
实验分析:F_IN是待测频率信号,CNT_EN是对待测频率脉冲计数允许信号CNT_EN高电平时允许计数,低电平时禁止计数。仿真波形显示,当CNT_EN为高电平时允许conter8对F_IN计数,低电平时conter8停止计数,由锁存信号LOCK 发出的脉冲,将conter8中的二个4位十进制数锁存进74374中,并由74374分高低位通过总线H[6..0]和L[6..0]输给74248译码输出显示,即测得的频率值。此后由清零信号CLR对计数器conter8清零,以备下一周期计数之用。
实验六:七段数码显示译码器设计
实验目的:学习7段数码显示译码器设计,学习VHDL的CASE语句应用及多层次设计方法。
实验内容:7段数码的程序和其波形方真,它的程序如下:
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 ;
ARCHITECTURE one OF DecL7S IS
BEGIN
PROCESS( A )
BEGIN
CASE A(3 DOWNTO 0) IS
WHEN "0000" => LED7S <= "0111111" ; -- X"3F"'0
WHEN "0001" => LED7S <= "0000110" ; -- X"06"'1
WHEN "0010" => LED7S <= "1011011" ; -- X"5B"'2
WHEN "0011" => LED7S <= "1001111" ; -- X"4F"'3
WHEN "0100" => LED7S <= "1100110" ; -- X"66"'4
WHEN "0101" => LED7S <= "1101101" ; -- X"6D"'5
WHEN "0110" => LED7S <= "1111101" ; -- X"7D"'6
WHEN "0111" => LED7S <= "0000111" ; -- X"07"'7
WHEN "1000" => LED7S <= "1111111" ; -- X"7F"'8
WHEN "1001" => LED7S <= "1101111" ; -- X"6F"'9
WHEN "1010" => LED7S <= "1110111" ; -- X"77"'10
WHEN "1011" => LED7S <= "1111100" ; -- X"7C"'11
WHEN "1100" => LED7S <= "0111001" ; -- X"39"'12
WHEN "1101" => LED7S <= "1011110" ; -- X"5E"'13
WHEN "1110" => LED7S <= "1111001" ; -- X"79"'14
WHEN "1111" => LED7S <= "1110001" ; -- X"71"'15
WHEN OTHERS => NULL ;
END CASE ;
END PROCESS ;
END ;
7段译码器仿真波形
实验七:数控分频器的设计
实验目的:学习数控分频器的设计、分析和测试方法
实验原理:数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可。
当输入输入不同的CLK时钟频率和预置值D时得不同FOUT电平
它的程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY DVF IS
PORT ( CLK : IN STD_LOGIC;
D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
FOUT : OUT STD_LOGIC );
END;
ARCHITECTURE one OF DVF IS
SIGNAL FULL : STD_LOGIC;
BEGIN
P_REG: PROCESS(CLK)
VARIABLE CNT8 : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK = '1' THEN
IF CNT8 = "11111111" THEN
CNT8 := D; --当CNT8计数计满时,D被同步预置给计数器CNT8
FULL <= '1'; --同时使溢出标志信号FULL输出为高电平
ELSE CNT8 := CNT8 + 1; --否则继续作加1计数
FULL <= '0'; --且输出溢出标志信号FULL为低电平
END IF;
END IF;
END PROCESS P_REG ;
P_DIV: PROCESS(FULL)
VARIABLE CNT2 : STD_LOGIC;
BEGIN
IF FULL'EVENT AND FULL = '1'
THEN CNT2 := NOT CNT2; - -如果溢出标志信号FULL为高电平,D触发器输出取反IF CNT2 = '1' THEN FOUT <= '1';
ELSE FOUT <= '0';
END IF;
END IF;
END PROCESS P_DIV ;
END;
上例的时序波形如下:
当给出不同输入值D时,FOUT输出不同频率(CLK周期=50ns)数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,本设计中的数控分频器就是用计数值可并行预置的加法计数器设计完成的,方法是将计数溢出位与预置数加载输入信号相接即可。
实验八:正弦信号发生器设计
实验目的:进一步熟悉Max+plusII及其LPM_ROM与FPGA硬件资源的使用方法。实验内容:设计一个正弦波发生器,并进行仿真测试,给出仿真波形。
实验原理图:
时序波形仿真图:
信号发生器结构包含两个部分:ROM的地址信号发生器,由6位计数器担任;一个正弦数据ROM,由LPM_ROM模块构成。
实验九:8位十六进制频率计设计
实验目的:学习较复杂的数字系统设计方法。
实验内容:设计一个8位十六进制频率计,并进行仿真测试,给出仿真波形。
LIBRARY IEEE; --测频控制
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ftctrl IS
PORT ( CLKK : IN STD_LOGIC; -- 1Hz
CNT_EN,RST_CNT,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; --32位锁存器USE IEEE.STD_LOGIC_1164.ALL; ENTITY REG32B IS
PORT ( LK : IN STD_LOGIC;
DIN :
IN STD_LOGIC_VECTOR(31 DOWNTO 0);
DOUT :
OUT STD_LOGIC_VECTOR(31 DOWNTO 0) ); END REG32B;
ARCHITECTURE behav OF REG32B IS BEGIN
PROCESS(LK, DIN)
BEGIN
IF LK'EVENT AND LK = '1' THEN DOUT <= DIN; --时钟到来时,锁存输入数据
END IF;
END PROCESS;
END behav;
LIBRARY IEEE; --32位计数器
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY counter32b IS
PORT ( ENABL,CLR,FIN : IN STD_LOGIC;
DOUT: OUT STD_LOGIC_VECTOR(31 DOWNTO 0));
END counter32b;
ARCHITECTURE behav OF counter32b IS
SIGNAL CQI : STD_LOGIC_VECTOR(31 DOWNTO 0);
BEGIN
PROCESS( ENABL,CLR,FIN )
BEGIN
IF CLR='1' THEN CQI <= (OTHERS=>'0'); --清零
ELSIF FIN'EVENT AND FIN='1' THEN
IF ENABL='1' THEN CQI<= CQI + 1;
END IF;
END IF;
END PROCESS;
DOUT <= CQI;
END behav;
library ieee;
use ieee.std_logic_1164.all;
entity preqtest is
port(clk1hz:in std_logic;
fsin:in std_logic;
dout:out std_logic_vector(31 downto 0));
end preqtest;
architecture struc of freqtest is
component ftctrl
port(clkk:in std_logic;
cnt_en:out std_logic;
rst_cnt:out std_logic;
load:out std_logic);
end component;
component counter32b
port(fin:in std_logic;
clr:in std_logic;
enabl:in std_logic;
dout:out std_std_logic_vector(31 downto 0));
end component;
component reg32b
port(lk:in std_logic;
din:in std_std_logic_vector(31 downto 0);
dout:out std_std_logic_vector(31 downto 0));
end component;
signal tsten1:std_logic;
signal clr_cnt1:std_logic;
sigal load1:std_logic;
sigal dt01:std_std_logic_vector(31 downto 0);
sigal carry_out1:std_std_logic_vector(6 downto 0);
begin
u1: ftctrl port map(clkk=>clk1hz,cnt_en=>tsten1,
rst_cnt=>clr_cnt1,load=>load1);
u2:reg32b port map(lk=>load1,din=>dto1,dout=>dout);
u3:counter32b port map(fin=>fsin,clr=>clr_cnt1,
enabl=>tsten1,dout=>dt01);
end struc;
时序波形仿真图:
实验十:序列检测器设计
实验目的:用状态机实现序列检测器的设计,了解一般状态机的设计与应用。
实验原理:序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则相同,则输出1,否则输出0。
实验内容:描述的电路完成对序列数“11100101”的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“B”。
它的程序如下:
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); --8位待检测预置数
BEGIN
D <= "11100101" ; --8位待检测预置数PROCESS( CLK, CLR )
BEGIN
IF 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 ;
WHEN OTHERS => Q <= 0 ;
END CASE ;
END IF ;
END PROCESS ;
PROCESS( Q )
--检测结果判断输出
BEGIN
IF Q = 8 THEN AB <= "1010" ; --序列数检测正确,输出"A"
ELSE AB <= "1011" ; --序
列数检测错误,输出"B"
END IF ;
END PROCESS ;
END behav ;
时序波形仿真图:
实验分析:当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出A,否则输出B。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。本实验描述的电路完成对序列数"11100101"的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“B”。
实验十一:乐曲硬件演奏电路设计
实验目的:学习设计硬件乐曲演奏电路。
实验内容:主系统由三个模块组成,由顶层设计文件,其内部有三个功能模块:tonetaba.vhd、notetabs.vhd和speakera.vhd。
实验程序:
硬件演奏电路顶层设计:
library ieee;
use ieee.std_logic_1164.all;
entity songer is
port( clk12mhz : in std_logic;
clk8hz : in std_logic;
code1 : out std_logic_vector (3 downto 0);
high1 : out std_logic;
spkout : out std_logic );
end;
architecture one of songer is
component notetabs
port( clk : in std_logic;
toneindex : out std_logic_vector (3 downto 0) );
end component;
component tonetaba
port ( index : in std_logic_vector (3 downto 0);
code : out std_logic_vector (3 downto 0);
high : out std_logic;
tone : out std_logic_vector (10 downto 0 ) );
end component;
component speakera
port (clk : in std_logic;
tone : in std_logic_vector (10 downto 0 );
spks : out std_logic );
end component;
signal tone : std_logic_vector (10 downto 0 );
signal toneindex : std_logic_vector (3 downto 0);
begin
u1: notetabs port map (clk=>clk8hz,toneindex=>toneindex );
u2: tonetaba port map (index=>toneindex,tone=>tone,code=>code1,high=>h igh1);
u3: speakera port map (clk=>clk12mhz,tone=>tone,spks=>spkout );
end;
Speakera程序段:
library ieee;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity speakera is
port ( clk : in std_logic;
tone : in std_logic_vector (10 downto 0);
spks : out std_logic );
end;
architecture one of speakera is
signal preclk, fullspks : std_logic;
begin
divideclk : process(clk)
variable count4 : std_logic_vector (3 downto 0);
begin
preclk <= '0';
if count4>11 then preclk <= '1'; count4 := "0000";
elsif clk'event and clk = '1' then count4 := count4 + 1;
end if;
end process;
genspks: process(preclk,tone)
variable count11 : std_logic_vector (10 downto 0);
begin
if preclk'event and preclk = '1' then
if count11= 16#7ff# then count11 :=tone ; fullspks <= '1';
else count11 := count11 + 1; fullspks <= '0'; end if;
end if;
end process;
delayspks: process(fullspks)
variable count2 : std_logic;
begin
if fullspks'event and fullspks = '1' then count2 := not count2;
if count2 = '1' then spks <= '1';
else spks <= '0'; end if;
end if;
end process;
end;
tonetaba程序段:
library ieee;
use ieee.std_logic_1164.all;
entity tonetaba is
port ( index : in std_logic_vector ( 3 downto 0 );
code : out std_logic_vector ( 3 downto 0 );
high : out std_logic;
tone : out std_logic_vector ( 10 downto 0 ) );
end;
architecture one of tonetaba is
begin
search : process (index)
begin
case index is
when "0000"=>tone<="11111111111";code<= "0000"; high <='0';--2047;
when "0001"=>tone<="01100000101";code<= "0001"; high <='0';--773;
when "0010"=>tone<="01110010000";code<= "0010"; high <='0';--912;
when "0011"=>tone<="10000001100";code<= "0011"; high <='0';--1036;
when "0101"=>tone<="10010101101";code<= "0101"; high <='0';--1197;
when "0110"=>tone<="10100001010";code<= "0110"; high <='0';--1290;
when "0111"=>tone<="10101011100";code<= "0111"; high <='0';--1372;
when "1000"=>tone<="10110000010";code<= "0001"; high <='0';--1410;
when "1001"=>tone<="10111001000";code<= "0010"; high <='0';--1480;
when "1010"=>tone<="11000000110";code<= "0011";
high <='0';--1542;
when "1100"=>tone<="11001010110";code<= "0101"; high <='0';--1622;
when "1101"=>tone<="11010000100";code<= "0110"; high <='0';--1668;
when "1111"=>tone<="11011000000";code<= "0001"; high <='0';--1728;
when others => null;
end case;
end process;
end;
notetabs的程序段:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity notetabs is
port ( clk : in std_logic;
toneindex : out std_logic_vector (3 downto 0)); end;
architecture one of notetabs is
component music port (address : in std_logic_vector (7 downto 0);
inclock : in std_logic;
q : out std_logic_vector(3 downto 0)); end component;
signal counter :std_logic_vector (7 downto 0); begin
cnt8 : process(clk,counter)
begin
if counter=138 then counter <= "00000000";
elsif (clk'event and clk = '1')then counter<= counter +1; end if;
end process;
u1: music port map(address=>counter , q =>toneindex, inclock =>clk);
end;
时序仿真图:
实验十二VGA彩条信号显示控制器设计
实验目的:学习VGA图像显示控制器的设计。
实验内容:设计一个VGA图像显示控制器,并进行仿真测试,给出仿真波形。实验程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY COLOR IS
PORT(CLK,MD: IN STD_LOGIC;
HS,VS,R,G,B: OUT STD_LOGIC);
END COLOR;
ARCHITECTURE behav OF COLOR IS
SIGNAL HS1,VS1,FCLK,CCLK : STD_LOGIC;
SIGNAL MMD:STD_LOGIC_VECTOR(1 DOWNTO 0); SIGNAL FS:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL CC:STD_LOGIC_VECTOR(4 DOWNTO 0); SIGNAL LL:STD_LOGIC_VECTOR(8 DOWNTO 0); SIGNAL GRBX:STD_LOGIC_VECTOR(3 DOWNTO 1); SIGNAL GRBY:STD_LOGIC_VECTOR(3 DOWNTO 1); SIGNAL GRBP:STD_LOGIC_VECTOR(3 DOWNTO 1); SIGNAL GRB:STD_LOGIC_VECTOR(3 DOWNTO 1); BEGIN
GRB(2)<=(GRBP(2) XOR MD) AND HS1 AND VS1; GRB(3)<=(GRBP(3) XOR MD) AND HS1 AND VS1; GRB(1)<=(GRBP(1) XOR MD) AND HS1 AND
VS1;
PROCESS( MD )
BEGIN
IF MD'EVENT AND MD='0'THEN
IF MMD="10"THEN MMD<="00";
ELSE MMD<=MMD+1;
END IF;
END IF;
END PROCESS;
PROCESS( MMD )
BEGIN
IF MMD="00" THEN GRBP<=GRBX;
ELSIF MMD="01" THEN GRBP<=GRBY;
ELSIF MMD="10" THEN GRBP<=GRBX XOR GRBY;
ELSE GRBP<="000";
END IF; END PROCESS;
PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK='1'THEN
IF FS=13 THEN FS<="0000";
ELSE FS<=(FS+1);
END IF;
END IF;
END PROCESS;
FCLK <=FS(3); CCLK<=CC(4); PROCESS(FCLK)
BEGIN
IF FCLK'EVENT AND FCLK='1'THEN
IF CC=39 THEN CC<="00000";
ELSE CC<=CC+1;
END IF;
END IF;
END PROCESS;
PROCESS(CCLK)
BEGIN
IF CCLK'EVENT AND CCLK='0'THEN
IF LL=481 THEN LL<="000000000";
ELSE LL<=LL+1;
END IF;
END IF;
END PROCESS;
PROCESS(CC,LL)
BEGIN
IF CC>23 THEN HS1<='0';
ELSE HS1<='1';
END IF;
IF LL>497 THEN VS1<='0';
ELSE VS1<='1';
END IF;
END PROCESS;
PROCESS(CC,LL)
BEGIN
IF CC<3 THEN GRBX<="111"; ELSIF CC<6 THEN GRBX<="110";
ELSIF CC<9 THEN GRBX<="101";
ELSIF CC<13 THEN GRBX<="100";
ELSIF CC<15 THEN GRBX<="011";
ELSIF CC<18 THEN GRBX<="010";
ELSIF CC<21 THEN GRBX<="001";
ELSE GRBX<="000";
END IF;
IF LL<60 THEN GRBY<="111";
ELSIF LL<130 THEN GRBY<="110";
ELSIF LL<180 THEN GRBY<="101";
ELSIF LL<240 THEN GRBY<="100";
ELSIF LL<300 THEN GRBY<="011";
ELSIF LL<360 THEN GRBY<="010";
ELSIF LL<420 THEN GRBY<="001";
ELSE GRBY<="000";
END IF;
END PROCESS;
HS<=HS1; VS<=VS1;R<=GRB(2); G<=GRB(3); B<=GRB(1);
END behav;
时序仿真图:
实验说明:本实验中采用3位数字信号表达:三基色信号R、G、B(纯数字方式),仅可显示八种颜色。此彩条信号发生器可通过外部控制产生三种显示模式,共六种显示变化,即横彩条:1白黄青绿品红蓝黑,2黑蓝红品绿青黄白;竖彩条:1白黄青绿品红蓝黑,2黑蓝红品绿青黄白;棋盘格:棋盘格显示模式1,棋盘格显示模式2。