数字电路模块的 VHDL设计组合模块的设计时序模块的设计存储模块的设计组合模块的 VHDL设计基本逻辑单元电路数据传输控制电路数据编码转换电路数据运算电路基本逻辑单元的设计基本门电路表达简单逻辑关系,采用简单的赋值语句就能方便地实现;没有必要采用更复杂的结构。例如:
反相器 y <= not a;
4输入与非门 y <= not (a0 and a1 and a2 and a3);
与或非 y <= not((a1 and a2) or( a3 and a4));
基本逻辑单元的设计为了表达门电路的延迟时间,可以利用
after语句表达延迟时间;对基本门电路延迟时间的设计能够较真实地模拟电路信号传输的实际情况,分析时序步骤的正确性,
避免竞争冒险;但此类语句对电路综合没有效果;
基本逻辑单元的设计例,3输入端异或门参见 p.417 表 5-46
architecture rtl of kxor3 is
signal y1,std_logic;
begin
y1<= a xor b xor c ;
y<= y1 after 3 ns when y1='1' else
y1 after 5 ns when y1='0' ;
end rtl;
cbay
数据传输控制单元的设计三态总线控制;
多路数据选择控制;
多路数据分配控制;
数据传输控制单元:三态控制单元器件的三态输出描述:
引入中间信号,采用条件赋值语句;
例,4输入与非门
y <= not (a0 and a1 and a2 and a3);
改为:
y1 <= not (a0 and a1 and a2 and a3);
y<=y1 when en='1' else 'Z';
数据传输控制单元:三态控制单向总线控制数据传输控制单元:三态控制单向总线控制 74x541 p.272 图 5-57
architecture d of k74541 is
signal en:std_logic;
begin
en<=not (g1 or g2);
y<=a when en='1' else (others =>'Z');
end d;
数据传输控制单元:三态控制双向总线控制数据传输控制单元:三态控制双向总线控制 74x245 p.273 图 5-58
entity k74245 is
port(a,b:inout std_logic_vector(7 downto 0);
dir,g:in std_logic);
end k74245;
architecture dfl of k74245 is
begin
b<=a when (g = '0') and (dir = '0') else "ZZZZZZZZ";
a<=b when (g = '0') and (dir = '1') else (others=>'Z');
end dfl;
数据传输控制单元:三态控制注意:双向总线在功能仿真时的输入设置
a和 b的输入不要同时存在;
设置 a的输入时,则 b为输出,应将 b的输入设置为高阻;反过来也是同样;
转换传输方向时,应该以双向阻塞作为间隔,
避免出现冲突。
数据传输控制单元,MUX
数据传输控制单元,MUX
MUX是电路中控制数据流动最为常用的手段;
根据控制量的数值由多路数据中选择一路输出;
采用选择赋值能够非常直观地表达 MUX的概念;
数据传输控制单元,MUX
4路 8位数据选择器
architecture rtl of mux4in8b is
begin
with s select
y<= a when "00",
b when "01",
c when "10",
d when "11",
(others => 'U') when others;
end rtl;
数据传输控制单元,MUX
architecture beh of mux4in8p is
begin
process(s,a,b,c,d)
begin
case s is
when "00" => y<=a;
when "01" => y<=b;
when "10" => y<=c;
when "11" => y<=d;
when others => y<=(others =>'U');
end case;
end process;
end beh; 采用进程和 case语句实现数据编码转换单元该类电路为多路输入 /多路输出,将输入的编码转换为对应的输出的编码;
采用选择赋值语句可以对各类码制转换电路进行设计。
数据编码转换单元:二进制译码器
architecture rtl of v74x138 is
signal yli:std_logic_vector(0 to 7);
begin
with a select yli<=
"01111111" when "000",
"10111111" when "001",
"11011111" when "010",
"11101111" when "011",
"11110111" when "100",
"11111011" when "101",
"11111101" when "110",
"11111110" when "111",
"11111111" when others;
yl<=yLi when (g1 and not g2al and not g2bl)=?1? else
“11111111”;
end rtl;
数据编码转换单元,8421-余 3码
architecture rtl of kbcd_ex3 is
begin
with a select y<=
"0011" when "0000","0100" when "0001",
"0101" when "0010","0110" when "0011",
"0111" when "0100","1000" when "0101",
"1001" when "0110","1010" when "0111",
"1011" when "1000","1100" when "1001",
"1111" when others;
end rtl;
数据编码转换单元,7段译码器输入 4位 BCD码,产生 7个输出,分别驱动相应显示器件; p.261 图 5-44
考虑 7段输出与数字的对应关系,可以得出如下关系
abcdefg
0,0000--1111110 1,0001--0110000
2,0010--1101101 3,0011--1111001
数据编码转换单元,7段译码器
architecture d of bcdseg7 is
begin
y<="1111110" when data="0000" else
"0110000" when data="0001" else
"1101101" when data="0010" else
"1111001" when data="0011" else
"0110011" when data="0100" else
"1011011" when data="0101" else
"0011111" when data="0110" else
"1110000" when data="0111" else
"1111111" when data="1000" else
"1110011" when data="1001" else
“0000000” ;
end d;
数据编码转换单元:优先编码器
architecture rtl of kencoder is
signal a1:std_logic_vector(2 downto 0);
begin
a1 <="000" when i(7)= '0' else
"001" when i(7 downto 6)="10" else
"010" when i(7 downto 5)="110" else
"011" when i(7 downto 4)="1110" else
"100" when i(7 downto 3)="11110" else
"101" when i(7 downto 2)="111110" else
"110" when i(7 downto 1)="1111110" else
"111";
a<=a1 when el='0' else "111";
end rtl;
数据检测单元:奇偶校验器奇偶校验电路是实现数据错误检验的一种基本电路,其方式是检测在输入数据中‘ 1’的个数是奇数还是偶数;通常采用异或门的结构实现。
数据检测单元:奇偶校验器
architecture rtl of kparity9 is
signal y1,y2,y3,y,std_logic;
begin
y1<= i(1) xor i(2) xor i(3) ;
y2<= i(4) xor i(5) xor i(6) ;
y3<= i(7) xor i(8) xor i(9) ;
y<= y1 xor y2 xor y3 ;
odd<= y ;
even<= not y;
end rtl;
作业题
5.57 对图 X5.57的电路(可控 2-4译码器)进行行为设计(采用进程和 case语句);
5.59 数据选择器 74153的功能表如表 5-36所示,写出该电路的数据流设计;
要求写出完整的电路模块程序,包含实体、结构体和必要的资源说明,并通过仿真波形,表达电路的功能。