VHDL设计深入
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
when 2 => q <= i2;
when 3 => q <= i3;
when others => null;
4选1 选择器的电路图(7-6代码)
【例7-7】
variable muxval : integer range 7 downto 0;
begin
muxval := 0;
if (a = '1') then end if;
7.3 资源优化 7.3.2 逻辑优化
减少资源的占用
7.3 资源优化
7.3.3 串行化
在时间上复用逻辑块
7.3.3 串行化
7.3 资源优化
7.4 速 度 优 化
7.4.1 流水线设计
• 流水线技术几乎是最常用的提供系统工作 速率的强有力手段。
• 将处理过程分成串连的n个步骤,并将单向 串连起来,每个步骤之间用D触发器分割。
声明
• 本部分内容是数字电子系统的设计中要遇到的 特殊问题,虽不是考试重点,但却是实际设计 中的关键注意事项。
• 艺无止境,讲授本部分的目的仅仅是带领入门, 修行仍靠自身。要熟练使用这些技巧,并且有 进一步的提高,必须经过大量的项目实践去积 累。
7.3 资源优化
7.3.1 资源共享
资源共享即 RTL 级模块中的两个 或两个以上的部分共享一组逻辑
7. BEGIN
8. PROCESS ( control, q, in1 )
9. BEGIN
详细参见:
10. IF control = ‘0' THEN
p178_ex7-10
11. x <= q;
12. q <= "ZZZZZZZZ";
-- correct code, compare with example 5_14;
when others => null;
4选1 选择器的电路图(7-7代码)
差之毫厘 谬之千里
上面 2 个图的 差异?
1. 看似相似的代码, 生成的电路
却
大相径庭!!
2. 产生了 不需要的 时序电路单元(DFF)
图 例7-6中错误的工作时序
图例7-7中正确的工作时序
小结:变量赋值与信号赋值
【例7-3】
ARCHITECTURE bhv OF DFF3 IS
SIGNAL A,B : STD_LOGIC ;
BEGIN
PROCESS (CLK) BEGIN
D1 IFD CQLK'EVENDT AQND CLK D= 'Q1' QT1HEN
D1
A <= D1 ; B <= A ; Q1 <= B ;
电路图是?
Ex7-9
双向端口:ex7-9
3.10 双向和三态电路信号赋值
3.10.2 双向端口设计
图 例7-9的仿真波形图
双向端口:设计提示
• 如果一个双向端口 用于输入模式, 必须使得
原来呈现 输出模式 的端口 为“Z”状态
• ENTITY bitri_stateok IS
1.
PORT ( control : IN STD_LOGIC;
10
A2…
EN n An 01
注意:
任何时刻,只允许一个三态门使能, 其余为高阻态。
三态门:图
VHDL 应如何表达 ?
三态门:代码
1. ENTITY tri_s IS
2.
PORT ( enable,
3.
datain
4.
dataout
5. END ENTITY tri_s;
: IN : IN : OUT
2.
in1
: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
3.
x
: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
4.
q
: INOUT STD_LOGIC_VECTOR(7 DOWNTO 0)
);
5. END ENTITY bitri_stateok;
6. ARCHITECTURE BEHAV OF bitri_stateok IS
muxval := muxval + 1;
if (b = '1') then end if;
muxval := muxval + 2;
case muxval is
when 0 => q <= i0;
when 1 => q <= i1;
when 2 => q <= i2;
when 3 => q <= i3;
程序2: Architecture one of sample
variable a, b, c : integer; begin c <= a + b;
end;
判断下面3个程序中是否有错误,若有则指出错误所在,并给出完整程序。
程序3:
library ieee; use ieee.std_logic_1164.all; entity mux21 is port ( a, b : in std_logic; sel : in std_logic; c : out std_logic;); end sam2; architecture one of mux21 is begin if sel = '0' then c := a; else c := b; end if; end two;
A := D1 ; B := A ; Q1 <= B ;
END IF;
END PROCESS ; END ;
时序波形图的分析
VHDL语句的 执行时间顺序 问题
1. 和 软件语言的 重要差异。 2. 很令人困惑 的 问题!!
3. 执行赋值≠完成赋值:
结论:关于 VHDL代码的 执行时间 顺序问题
1. signal 和 variable 代入语句的执行时间不同
Step 1
Step 2
…
Step n
47
问题:下图的流水线为何可以提高 速度?
时序电路的主要时序参数
clk
Din
clk Din
Tsu
Tsu : setup time
Th
Th : hold time Tco : clock output delay
Tco
流水线设计: 方法 Tclk ≥ Tdelay/2+Tco+Tsetup
IF enable = '1' THEN
11.
dataout
<= datain;
12.
ELSE
13.
dataout
<= "ZZZZZZZZ";
14.
END IF;
15.
END PROCESS;
16. END ARCHITECTURE BEHAV;
详细参见: P177 7-8
-- error code :dataout <= "zzzzzzzz";
变量与信号的差异:
1)赋值方式的不同: 变量:= 表达式; 信号 < = 表达式;
2)硬件实现的功能不同: 信号代表电路单元、功能模块间的互联,
代表实际的硬件连线; 变量代表电路单元内部的操作,代表暂
存的临时数据。
3)有效范围的不同: 信号:程序包、实体、结构体;全局量。 变量:进程、子程序;局部量。
第7章
VHDL设计深入
7.1 进程中的信号赋值与变量赋值
7.1 进程中的信号赋值与变量赋值
判断下面3个程序中是否有错误,若有则指出错误所在,并给出完整程序。
程序1: Signal A, EN : std_logic; is Process (A, EN)
Variable B : std_logic; Begin if EN = 1 then B <= A; end if; end process;
wenku.baidu.com
5.
q : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0)
6.
);
7. END ENTITY bitri_state;
8. ARCHITECTURE BEHAV OF bitri_state IS
9. BEGIN
10. PROCESS ( control, q, in1 )
11. BEGIN
STD_LOGIC; STD_LOGIC_VECTOR(7 DOWNTO 0); STD_LOGIC_VECTOR(7 DOWNTO 0));
6. ARCHITECTURE BEHAV OF tri_s IS
7. BEGIN
8.
PROCESS ( enable, datain )
9.
BEGIN
10.
begin
muxval <= 0;
if (a = '1') then end if;
muxval <= muxval + 1;
if (b = '1') then end if;
muxval <= muxval + 2;
case muxval is
when 0 => q <= i0;
when 1 => q <= i1;
13. ELSE
14. q <= in1;
15. x <= "ZZZZZZZZ";
-- the code can be omitted !!!
16. END IF;
17. END PROCESS;
18.END ARCHITECTURE BEHAV;
双向和三态电路信号赋值
双向端口设计
图 例7-10的仿真波形图
12. IF control = ‘0' THEN
13. x <= q;
-- error code,
14. ELSE
15. q <= in1;
16. x <= "ZZZZZZZZ";
17. END IF;
18. END PROCESS;
19.END ARCHITECTURE BEHAV;
详细参见: p178
7.2.2 双向缓冲器:图
VHDL 应如何表达 ?
1. ENTITY bitri_state IS
2.
PORT ( control : IN STD_LOGIC;
3.
in1
: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
4.
x : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
ARCHITECTURE
{SIGNAL Declarations} label1: PROCESS {VARIABLE Declarations}
┇
label2: PROCESS {VARIABLE Declarations}
4)赋值行为的不同: 信号赋值延迟更新数值、时序电路; 变量赋值立即更新数值、组合电路。
3. BEGIN
4.
PROCESS ( a, b, c )
5.
BEGIN
6.
y <= a + b;
7.
z <= c - a;
8.
y <= b;
9.
END PROCESS;
10. END ARCHITECTURE bhv;
如果 a, b, c 分别为 1,2,3
Y的值 等于多少
?
线与
【例7-6】
process(i0,i1,i2,i3,a,b)
三态门:要点
1. 三态电路是总线电路设计的必须状态
2. CPLD/FPGA器件 不能
在内部 产生 三态电路 只能在
端口处 产生 三态电路
2. 内部三态电路
必须用
选择器电路 代替
用途 主要作为TTL电路与总线(BUS)间的接口电路
数据总线
G1 EN 1
G2 EN 1
Gn
…
EN 1
EN 1
10
A1
EN 2
end rtl;
architecture rtl of ex is signal a : std_logic;
begin process(…) begin a <= b; … end process;
process(…) begin
a <= c; ...
end process;
end ex;
7.2 含高阻输出的电路设计
2. variable 代入后,其数值立即发生改变!
3. signal 代入后,数值不立即改变,只有在END
PROCESS前才改变。
7.1 进程中的信号赋值与变量赋值
Signal 的一个例子 p39
1. ARCHITECTURE bhv OF p39 IS
2. SIGNAL a, b, c, y, z : INTEGER;
END IF;
CLK
CLK END PROCESS ;
END ;
时序波形图的分析
【例7-4】
ARCHITECTURE bhv OF DFF3 IS
BEGIN
PROCESS (CLK)
VARIABLE A,B : STD_LOGIC ;
Q Q1 BEGIN D1
DQ
Q1
IF CLK'EVENT AND CLK = '1' THEN CLK
关于寄存输入和寄存输出
• 数字系统中,各模块应采取(寄存输入和) 寄存输出,这样做有如下优点:
1. 模块化清晰(特别是寄存输出); 2. 提高系统最高工作速率; 3. 有利于整个系统和单个模块分别进行静态时
5)信号的多次赋值 a. 一个进程:最后一次赋值有效 b. 多个进程:多源驱动 线与、线或、三态
例:信号的多次赋值
architecture rtl of ex is signal a : std_logic;
begin process(…) begin a <= b; … a <= c; end process;