基本数字逻辑单元设计

上传人:好** 文档编号:112036211 上传时间:2019-11-04 格式:PPT 页数:62 大小:915KB
返回 下载 相关 举报
基本数字逻辑单元设计_第1页
第1页 / 共62页
基本数字逻辑单元设计_第2页
第2页 / 共62页
基本数字逻辑单元设计_第3页
第3页 / 共62页
基本数字逻辑单元设计_第4页
第4页 / 共62页
基本数字逻辑单元设计_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《基本数字逻辑单元设计》由会员分享,可在线阅读,更多相关《基本数字逻辑单元设计(62页珍藏版)》请在金锄头文库上搜索。

1、第四章 基本数字逻辑单元的设计 4.1 组合逻辑设计 4.1.2 三态缓冲器和总线缓冲器 8bit单向总线缓冲器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY tri_buf8 IS PORT (din:IN STD_LOGIC_VECTOR (7 DOWN TO 0); dout:OUT STD_LOGIC_VECTOR (7 DOWN TO 0); en:IN STD_LOGIC); END tri_buf8; ARCHITECTURE data_flow OF tri_buf8 IS PROCESS (en, din) BEGIN I

2、F (en=1) THEN dout clr ; d= count_in(i+1),,Q = count(i); Qn = count_in(i+1); END GENERATE; END rt_riplecountl; -单个触发器性能描述 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY dfft IS PORT (clk, clr, d:IN STD_LOGIC; Q:OUT STD_LOGIC; Qn:BUFFER STD_LOGIC); END dfft; ARCHITECTURE rtld OF dfft IS BEGIN PROC

3、ESS (clk, clr) BEGIN IF (clr = 0) THEN Q = 0; Qn = 1; ELSIF (clk EVENT AND clk = 1) THEN Q = d; Qn = NOT d; END IF; END PROCESS; END rtld; 4.3 存储器 4.3.1 概述 存储器单元实际上是时序逻辑电路的一种。按存储器的 使用类型可分为只读存储器(ROM)和随机存取存储器 (RAM),两者的功能有较大的区别,因此在描述上也有 所不同。 存储器是许多存储单元的集合,按单元号顺序排列。每 个单元由若干二进制位构成,以表示存储单元中存放的 数值。这种结构和数组的

4、结构非常相似,故在VHDL语言 中,通常由数组描述存储器。 TYPE memory IS ARRAY (INTEGER RANGE ) OF INTEGER; TYPE word IS STD_LOGIC_VECTOR (k-1 DOWN TO 0); TYPE memory IS ARRAY (0 TO w-1) OF word ; 4.3.3 随机存储器RAM LIBRARY IEEE; USE IEEE.STD_LOGIC_1164. ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY ram4k IS GENERIC (k:INTEGER: = 8; w

5、:INTEGER: = 12; rd_del, wr_del:TIME ); PORT (WR, RD, CS:IN STD_LOGIC; Adr:IN STD_LOGIC_VECTOR (w-1 DOWNTO 0) ; D:INOUT STD_LOGIC_VECTOR (k-1 DOWNTO 0); END ram4k; WR RD CS Adr11:0 Dout7:0 ARCHITECTURE behavram4k OF ram4k IS TYPE memory IS ARRAY (0 TO 2*w-1) OF STD_LOGIC_VECTOR (k-1 DOWNTO 0); SIGNAL

6、 sram:memory; SIGNAL Adr_in:INTEGER; BEGIN Adr_in = CONV_INEGER (Adr); -位矢量转换成整数 PROCESS (WR, RD, CS) BEGIN IF CS = 0 THEN IF RD = 0 THEN D = sram (Adr_in) AFTER rd_del; ELSIF WR = 0 THEN sram (Adr_in) = D AFTER wr_del; ENDIF; ELSE D = (OTHERSZ) AFTER rd_del; END IF; END PROCESS; END behav; 4.3.2 只读

7、存储器ROM 在用VHDL语言描述ROM时,ROM的内容应在仿真 时先读到ROM中,这就是ROM的初始化。存储器的初始 化要依赖于外部文件的读取,即由TEXTIO对ROM进行 初始化。下面是对ROM进行初始化的实例。 VARIABLE startup:BOOLEAN: = TRUE; VARIABLE l:LINE; - LINE是在TEXTIO程序包定义的存 取类型 VARIABLE j:INTEGER; VARIABLE rom:memory; FILE romin:TEXT IS IN “rom2k.in“; -TEXT 是在TEXTIO程序 包定义的文件类型 初始化程序: IF sta

8、rtup THEN FOR j IN rom RANGE LOOP -利用数据区间属性函数获得 数组的上下限 READLINE (romin, l ); -从文件romin中读入一行放入l 中。 READ (l, rom(j); -从l中读入一个数据放入rom中 END LOOP; END IF; G1 G2 Adr11;0 Dout7:0 只读存储器ROM的VHDL程序。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE STD.TEXTIO.ALL; ENTITY rom4k IS PO

9、RT (G1, G2:IN STD_LOGIC; Adr:IN STD_LOGIC_VECTOR (11DOWN TO 0) ; dout: OUT STD_LOGIC_VECTOR (7 DOEN TO 0); END rom4k; ARCHITECTURE behav_rom4k OF rom4k IS TYPE word IS STD_LOGIC_VECTOR (7 DOWN TO 0); TYPE memory IS ARRAY (0 TO 4095) OF word; SIGNAL adr_in:INTEGER RANGE 0 TO 4095; VARIBLE rom:memory;

10、 VARIBLE startup:BOOLEAN: = TURE; VARIBLE l:LINE; VARIBLE j:INTEGER; FILE romin:TEXT IS IN “rom2k.in”; -文件类说明. BEGIN PROCESS (G1, G2) BEGIN IF startup THEN FOR j IN rom RANGE LOOP READLINE (romin, l ); READ (l, rom(j); END LOOP; startup: = FALSE; END IF; adr_in = CONV_INTEGER (Adr); -将位矢量转换成整数. IF (

11、G1 = 1 AND G2 = 1) THEN dout = rom (adr_in); ELSE dout = “ZZZZZZZZ”; ENDIF; END PROCESS; END behav_rom2k; 4.3.4先进后出堆栈 先进后出堆栈是处理程序中断 的常用数据结构,其数据存放结 构和RAM是一致的,但存储方 式有所不同。 先进后出堆栈由2个功能块组 成,即存储器体和堆栈指针SP, 进堆时SP+1SP指向下一个存 储单元;出堆时SP-1 SP,并 把SP所指示的存储单元的内容 输出。 din7:0 push pop clk reset Dout7:0 256字节先进后出堆栈的VHD

12、L程序。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH. ALL; USE IEEE.STD_LOGIC_UNSIGNED. ALL; ENTITY stack IS GENERIC (w:INTEGER: = 256; k:INTEGER: =8); PORT (clk, reset, push, pop:IN STD_LOGIC din:IN STD_LOGIC_VECTOR (k-1 DOWNTO 0); dout:OUT STD_LOGIC_VECTOR (k-1 DOWNTO 0); END stack; ARCHITECTURE behav_stack OF stack IS

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号