时间只用于仿真不用于综合。
第十章:VHDL基本语句
CASE sel IS
WHEN 0 => z1<='1' ; -- 当sel=0时选中
WHEN 1?3 => z2<='1' ; -- 当sel为1或3时选中 WHEN 4 To 7?2 => z3<='1'; -- 当sel为2、4、5、6或7时选中 WHEN OTHERS => z4<='1' ; -- 当sel为8~15中任一值时选中 END CASE ; 变量赋值符号:“:=”,信号赋值符号:“<=”.
PACKAGE data_types IS -- 定义程序包 SUBTYPE data_element IS INTEGER RANGE 0 TO 3 ;-- 定义数据类型 TYPE data_array IS ARRAY (1 TO 3) OF data_element;
END data_types;
USE WORK.data_types.ALL; --打开以上建立在当前工作库的程序包data_types ENTITY sort IS
PORT ( in_array : IN data_array ; out_array : OUT data_array); END sort;
ARCHITECTURE exmp OF sort IS BEGIN
PROCESS (in_array) -- 进程开始,设data_types为敏感信号 PROCEDURE swap(data : INOUT data_array;
-- swap的形参名为data、low、high low, high : IN INTEGER ) IS VARIABLE temp : data_element ; BEGIN -- 开始描述本过程的逻辑功能
IF (data(low) > data(high)) THEN -- 检测数据 temp := data(low) ; data(low) := data(high); data(high) := temp ;
END IF ;
END swap ; -- 过程swap定义结束 VARIABLE my_array : data_array ; -- 在本进程中定义变量my_array BEGIN -- 进程开始 my_array := in_array ; -- 将输入值读入变量 swap(my_array, 1, 2);
-- my_array、1、2是对应于data、low、high的实参
swap(my_array, 2, 3); -- 位置关联法调用,第2、第3元素交换 swap(my_array, 1, 2); -- 位置关联法调用,第1、第2元素再次交换 out_array<= my_array ; END Process ; END exmp ;
要求会写程序:序列检测器,7位数码管,3-8线译码器,选择器(4选1或8选1),减法器,会真值表,奇偶校验程序,双向分频器(极分频不考),计数器。
生成语句(for)不考。
ARCHITECTURE behv OF cnt_bin_n IS COMPONENT d_ff
PORT(d, clk_s : IN STD_LOGIC; Q, NQ : OUT STD_LOGIC); END COMPONENT d_ff;
SIGNAL s : STD_LOGIC_VECTOR(0 TO n); BEGIN
s(0) <= in_1;
q_1 : FOR i IN 0 TO n-1 GENERATE
dff : d_ff PORT MAP (s(i+1), s(I), q(i), s(i+1)); END GENERATE;
END ARCHITECTURE behv;
第十一章
常用的4种设计技巧
1. 乒乓操作 2. 串并转换 3. 流水线操作 4. 数据接口同步
? 常用的3种面积优化方法
1. 资源共享2、逻辑优化3、串行化
?
速度优化:1、流水线设计2、寄存器配平3、关键路径法
第七章:有限状态机设计
? moore型状态机属于同步输出状态机
因为moore型状态机的输出则仅为当前状态的函数,这类状态机在输入变化还必须等待时钟的到来,时钟的状态变化才导致输出的变化 mealy属于异步输出状态机;
Mealy型状态机的输出是当前状态和所有输入信号的函数,它的输出是在变化后立即发生的,不依赖于时钟的同步;因此mealy型状态机要少等待一个时钟信号
同步置位,异步复位。
去毛刺方法:1、延时方式2、逻辑方式3、定时方式。
例4.3序列检测器(实验书)
LIBRARY IEEE; --11100101 USE IEEE.STD_LOGIC_1164.ALL; ENTITY LI42 IS
PORT (DIN,CLK,CLR:IN STD_LOGIC;
AB :OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END;
ARCHITECTURE behav OF LI42 IS
SIGNAL Q:INTEGER RANGE 0 TO 8;
SIGNAL D:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN
D<=\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 <=\ ELSE AB <=\ END IF; END PROCESS; END behav;
Moore型序列检测器例7-4课本246页
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY SCHK IS
PORT(DIN,CLK,RST : IN STD_LOGIC;
SOUT : OUT STD_LOGIC);
END SCHK;
ARCHITECTURE behav OF SCHK IS
TYPE states IS (s0,s1,s2,s3,s4,s5,s6,s7,s8);
--串行输入
SIGNAL ST,NST: states :=s0; --设定现态变量和次态变量 BEGIN
COM: PROCESS(ST, DIN) BEGIN --组合进程,规定各状态转换方式 CASE ST IS --11010011
WHEN s0=> IF DIN =’1’ THENNST<=s1;ELSENST<=s0;END IF; WHEN s1=> IF DIN =’1’ THEN NST<=s2;ELSE NST<=s0;END IF; WHEN s2=> IF DIN =’0’THEN NST<=s3;ELSE NST<=s0;END IF; WHEN s3=> IF DIN =’1’ THEN NST<=s4;ELSE NST<=s0;END IF; WHEN s4=> IF DIN =’0’ THEN NST<=s5;ELSE NST<=s0;END IF; WHEN s5=> IF DIN =’0’ THEN NST<=s6;ELSE NST<=s0;END IF; WHEN s6=> IF DIN =’1’ THEN NST<=s7;ELSE NST<=s0;END IF; WHEN s7=> IF DIN =’1’ THEN NST<=s8;ELSE NST<=s0;END IF; WHEN s8=> IF DIN =’0’ THEN NST<=s3;ELSE NST<=s0;END IF; WHEN OTHERS =>NST<=s0; END CASE ; END PROCESS;
REG: PROCESS (CLK,RST) BEGIN ---时序进程