EDA第6章
EDA第6章
6.1 顺序执行语句 6.2 并发执行语句 6.3 VHDL的描述风格 6.4 其他语句和说明
第6章 VHDL的描述语句与描述风格
6.1 顺序执行语句
应用范围:子程序与进程中 常用的顺序语句有:信号与变量赋值语句、流程控制语句、 WAIT语句、子程序调用语句、空操作(NULL)语句、断言 (ASSERT)语句、REPORT语句及其相关语句等。
SIGNAL value : INTEGER RANGE 0 TO 15; 第6章 VHDL的描述语句与描述风格 SIGNAL out1 : STD_LOGIC ; CASE语句使用时容易发生的错误: ... CASE value IS -- 缺少以WHEN引导的条件句 END CASE; ... CASE value IS WHEN 0 => out1<= '1' ; -- value2~15的值未包括进去 WHEN 1 => out1<= '0' ; END CASE ... CASE value IS WHEN 0 TO 10 => out1<= '1';-- 选择值中5~10的值有重叠 WHEN 5 TO 15 => out1<= '0'; END CASE;
第6章 VHDL的描述语句与描述风格
svec(0)<=v1; svec(1)<=v2; svec(2)<=s1; svec(3)<=s2; v1:=b; v2:=b; s2<=b; -- v1 的值(a)赋给 sevs(0) -- v2 的值(a)赋给 sevs(1) -- s1 的值(a)赋给 sevs(2) -- s2 的值(b)赋给 sevs(3) --立即将 v1 置为 b --立即将 v2 置为 b --由于该赋值语句对于 s2 为最后一个,所以将 s2 置为 b
EDA技术与Verilog_HDL(潘松)第6章习题答案
6-1 在Verilog设计中,给时序电路清零(复位)有两种不同方法,它们是什么,如何实现?答:同步清零、异步清零,在过程语句敏感信号表中的逻辑表述posedge CLK用于指明正向跳变,或negedge用于指明负向跳变实现6-2 哪一种复位方法必须将复位信号放在敏感信号表中?给出这两种电路的Verilog 描述。
答:异步复位必须将复位信号放在敏感信号表中。
同步清零:always @(posedge CLK) //CLK上升沿启动Q<=D; //当CLK有升沿时D被锁入Q异步清零:always @(posedge CLK or negedge RST) begin //块开始if(!RST)Q<=0; //如果RST=0条件成立,Q被清0else if(EN) Q<=D;//在CLK上升沿处,EN=1,则执行赋值语句end//块结束6-3 用不同循环语句分别设计一个逻辑电路模块,用以统计一8位二进制数中含1的数量。
module Statistics8(sum,A); output[3:0]sum;input[7:0] A;reg[3:0] sum;integer i;always @(A)beginsum=0;for(i=0;i<=8;i=i+1) //for 语句if(A[i]) sum=sum+1;else sum=sum;endendmodule module Statistics8(sum,A); parameter S=4;output[3:0]sum;input[7:0] A;reg[3:0] sum;reg[2*S:1]TA;integer i;always @(A)beginTA=A; sum=0;repeat(2*S)beginif(TA[1])sum=sum+1;TA=TA>>1;endendendmodulerepeat循环语句for循环语句module Statistics8(sum,A);parameter S=8;output[3:0]sum;input[7:0] A;reg[S:1] AT;reg[3:0] sum;reg[S:0] CT;always @(A) beginAT={{S{1'b0}},A}; sum=0; CT=S;while(CT>0) beginif(AT[1])sum=sum+1;else sum=sum;begin CT= CT-1; AT=AT>>1; end end endendmodule6-3 用不同循环语句分别设计一个逻辑电路模块,用以统计一8位二进制数中含1的数量。
EDA大作业 课程设计 简易计算器
在掌握常用数字电路功能和原理的基础上,根据EDA技术课程所学知识,利用硬件描述语言Verilog HDL、EDA软件Quartus II和硬件平台Cyclone/Cyclone II FPGA进行电路系统的设计。
本次实验我完成的内容是简单计算器的设计,下面我简单的进行一下原理的阐述。
设计一个简单计算器,输入为8位二进制数,分别用两位数码管显示,输出的计算结果为16位二进制数,并用四位数码管显示,能够实现+、-、 *、/ 四种运算,其中除法的结果显示分为商和余数两部分,分别用两位数码管显示。
为了完成要求的效果显示,我先设计了一个简单的四则运算器,为了使其结果能清楚的看到,所以计算器模块和一个7段数码管模块连接。
实验要求,输入分别用两位数码管显示,输出用四位数码管显示,所以用一个3—8译码器和数码管连接,通过开关控制,形成动态显示。
从左向右,依次是第一位数码管显示a的高四位,第二位数码管显示a的低四位;第三位数码管显示b的高四位,第四位数码管显示b的低四位;第五位数码管到第八位数码管显示输出的结果。
通过改变时钟,使其看起来像同时显示在数码管上。
设计流程如下图,分别用两个数码管表示八位二进制数,用一个case 语句表示输入数值采用哪种运算方式,分别用00,01,10,11表示加,减,乘,除。
用3—8译码器选择从哪个数码管输出。
硬件流程图输出结果 A. B 的显示软件流程图LED 灯接线部分显示:中心控制 复位编码 数码管输出输入A 输入B 运算选择C 输出out L E D 8 L E D 7 L E D 6 L E D 5 L E D 4 L E D 3 L E D 2 L E D 1第三章程序简单计算器的程序如下:module jsq9(a,b,c,Dout,count,clk,rst);input[7:0]a,b;input clk,rst;input[1:0]c;output[6:0]Dout;output [2:0]count;reg[6:0]Dout;reg[2:0]count;reg[15:0]out;reg[6:0] LED7S1,LED7S2,LED7S3,LED7S4, LED7S5,LED7S6,LED7S7,LED7S8; DECL7S u1(.A(a[7:4]) , .LED7S(LED7S1));DECL7S u2(.A(a[3:0]) , .LED7S(LED7S2));DECL7S u3(.A(b[7:4]) , .LED7S(LED7S3));DECL7S u4(.A(b[3:0]) , .LED7S(LED7S4));DECL7S u5(.A(out[15:12]) , .LED7S(LED7S5));DECL7S u6(.A(out[11:8]) , .LED7S(LED7S6));DECL7S u7(.A(out[7:4]) , .LED7S(LED7S7));DECL7S u8(.A(out[3:0]) , .LED7S(LED7S8));reg[7:0]out1,out2;always@(a,b,c,Dout,count,clk,rst)case(c)2'b00:out=a+b;2'b01:out=a-b;2'b10:out=a*b;2'b11:beginout1=a/b;out2=a%b;out={out1,out2};enddefault:;endcasealways@(posedge clk or negedge rst)beginif(!rst)count<=3'b000;else if(count==3'b111)count<=3'b000;elsecount<=count+3'b001;endalways@(posedge clk)begincase(count)3'b000: Dout<=LED7S1;3'b001:Dout<=LED7S2;3'b010:Dout<=LED7S3;3'b011:Dout<=LED7S4;3'b100: Dout<=LED7S5;3'b101:Dout<=LED7S6;3'b110:Dout<=LED7S7;3'b111:Dout<=LED7S8;endcaseendendmodulemodule DECL7S (A, LED7S);input [3:0] A;output [6:0] LED7S;reg [6:0] LED7S;always @(A)begincase(A)4'b0000 : LED7S<=7'b0111111; 4'b0001: LED7S <= 7'b0000110 ; 4'b0010: LED7S <= 7'b1011011; 4'b0011: LED7S <= 7'b1001111; 4'b0100: LED7S <= 7'b1100110 ; 4'b0101: LED7S <= 7'b1101101; 4'b0110: LED7S <= 7'b1111101 ; 4'b0111: LED7S <= 7'b0000111 ; 4'b1000: LED7S <= 7'b1111111 ; 4'b1001: LED7S <= 7'b1101111 ; 4'b1010: LED7S <= 7'b1110111 ; 4'b1011: LED7S <= 7'b1111100 ; 4'b1100: LED7S <= 7'b0111001 ;4'b1101: LED7S <= 7'b1011110 ; 4'b1110: LED7S <= 7'b1111001 ; 4'b1111: LED7S <= 7'b1110001 ; endcaseendendmodule第四章模块连接在本程序中,共由三个模块组成,第一个模块是一个四选一多路器其仿真图为:第二个模块是7段数码管显示程序如下module DECL7S (A, LED7S);input [3:0] A;output [6:0] LED7S;reg [6:0] LED7S;always @(A)begincase(A)4'b0000 : LED7S<=7'b0111111;4'b0001: LED7S <= 7'b0000110 ;4'b0010: LED7S <= 7'b1011011;4'b0011: LED7S <= 7'b1001111;4'b0100: LED7S <= 7'b1100110 ;4'b0101: LED7S <= 7'b1101101;4'b0110: LED7S <= 7'b1111101 ;4'b0111: LED7S <= 7'b0000111 ;4'b1000: LED7S <= 7'b1111111 ;4'b1001: LED7S <= 7'b1101111 ;4'b1010: LED7S <= 7'b1110111 ;4'b1011: LED7S <= 7'b1111100 ;4'b1100: LED7S <= 7'b0111001 ;4'b1101: LED7S <= 7'b1011110 ;4'b1110: LED7S <= 7'b1111001 ;4'b1111: LED7S <= 7'b1110001 ;endcaseendendmodule仿真图如下:把这个两个模块用一个3—8译码器进行连接,使其达到实验的要求。
精品文档-集成电路版图设计与TannerEDA工具的使用(王颖)-第6章
第6章 使用L-Edit设计版图实例
6.1 使用版图编辑器画PMOS晶体管的版图 6.2 使用版图编辑器画NMOS晶体管的版图 6.3 使用版图编辑器画反相器的版图 6.4 使用版图编辑器画并联晶体管的版图 6.5 使用版图编辑器画串联晶体管的版图 习题
第6章 使用L-Edit设计版图实例
后点击鼠标左键,然后点击Generate Cross-Section对话框
中的确认键(OK),最后得到的版图与横截面窗口如图6.13所
示。
第6章 使用L-Edit设计版图实例
图6.12 产生横截面观察对话框
பைடு நூலகம்
第6章 使用L-Edit设计版图实例
图6.13 版图与横截面图
第6章 使用L-Edit设计版图实例
第6章 使用L-Edit设计版图实例
图6.6 绘制P Select层
第6章 使用L-Edit设计版图实例
③ 画Active层。在DRC文件中规定有源区的最小宽度 (Active Minimum Width)为0.35微米,PMOS晶体管的有源区 到N阱之间的最小距离(PMOS Source/Drain spacing to Well Edge)为0.75微米。在选择了有源区绘图层和方框绘图工具后, 在版图区域中画一个高0.55微米、宽1.55微米的有源区,即 PMOS晶体管的沟道宽度为0.55微米,如图6.7所示。
第6章 使用L-Edit设计版图实例
第6章 使用L-Edit设计版图实例
图6.11 DRC相关窗口
第6章 使用L-Edit设计版图实例
(7) 进行晶体管的横截面观察。Tanner的版图编辑器配
有版图横截面观察功能,利用此功能可以观察所画版图与实际
EDA技术实用教程第6章NIOS软核SOPC系统设计
寄存器 CTL0 CTL1 CTL2 CTL3 CTL4 CTL5 名称 status estatus bstatus ienable ipending cpuid B31 ... B2 B1 保留 U 保留 EU 保留 BU 中断使能位 中断挂起位 处理器的唯一标识 B0 PIE EPIE BPIE
. . .
异常临时寄存器(1) 断点临时寄存器(2) 全局指针寄存器 堆栈指针寄存器 帧指针寄存器 异常返回地址(1) 断点返回地址(2) 返回地址寄存器
(1)寄存器R0作为0寄存器。它通常包含常数0。 因此,写它时无效,读这个寄存器的返回值为0。 (2)寄存器R1被汇编器作为临时寄存器使用,用 户程序中不能使用。 (3)寄存器R24和R29用于处理表达式;它们在用 户模式不可用。 (4)寄存器R25和R30是JTAG调试模式专用。 (5)寄存器R27和R28用于控制NiosII处理器使用 的栈。 (6)寄存器R31用于保存子程序调用的返回地址。
6.2 NiosII指令系统
NiosII处理器是精简指令架构(RISC)。其 算术和逻辑运算的操作数在通用寄存器执 行。 通过Load和Store指令在内存和寄存器 之间传送数据。 NiosII处理器的字长为32 bits。所有的寄存器都是32 bits。32-bit的 字节地址可用从小到大或从大到小的风格 赋值。在配置时,用户可能会选择一种赋 值风格。本文使用从小到大的风格。 NiosII 架构使用单独的指令和数据总线,通常叫 做哈佛架构。
NiosII CPU内部结构示意图
CPU复位信号 时钟信号 JTAG 调试模块 程序控制器和 地址生成器
指令存储器
精品课件-EDA技术及应用(第三版)-第6章
第6章 VHDL设计应用实例
2. VHDL源程序
1) 选通与门模块的源程序ANDARITH.VHD
--ANDARITH.VHD
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ANDARITH IS
--选通与门
PORT(ABIN: IN STD_LOGIC;
第6章 VHDL设计应用实例
实践证明,4位二进制并行加法器和串行级联加法器占 用几乎相同的资源。这样,多位加法器由4位二进制并行加法器 级联构成是较好的折中选择。本设计中的8位二进制并行加法器 即是由两个4位二进制并行加法器级联而成的,其电路原理图如 图6.1所示。
第6章 VHDL设计应用实例 图6.1 8位加法器电路原理图
BEGIN
A5<=‘0’& A4;
--将4位加数矢量扩为5位,为进位提
B5<=‘0’& B4;
--将4位被加数矢量扩为5位,
S5<=A5+B5+C4;
S4<=S5(3 DOWNTO 0);
CO4<=S5(4);
END ARCHITECTURE ART;
第6章 VHDL设计应用实例
2) 8位二进制加法器的源程序ADDER8B.VHD --ADDER8B.VHD LIBRARY IEEE; USE IEEE_STD.LOGIC_1164.ALL; USE IEEE_STD.LOGIC_UNSIGNED.ALL: ENTITY ADDER8B IS --由4位二进制并行加法器级联而成 的8位二进制加法器
B4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
S4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
EDA课程设计——数字跑表
第一章引言数字电子技术的应用一直在向着广度和深度扩展。
时至今日,“数字化”的浪潮几乎席卷了电子技术应用的一切领域。
由于电子产品的更新周期日益缩短,新产品开发速度日益加快,因而对电子设计自动化(EDA)提出了更高的要求,也有力地促进了EDA技术的发展和普及。
在数字集成电路方面,电路的集成度如摩尔定律(Moore’s Law)所预言的那样,以每1-2年翻一番的速度增长,使电路的复杂程度越来越高、规模越来越大。
同时,在基本技能方面,对使用EDA工具的能力也提出了更高的要求。
因此,学好EDA课程设计至关重要。
第二章 设计说明1.器件介绍-集成十进制加法计数器74160集成同步十进制加法计数器74160。
图2-1给出了74160的引脚排列图和逻辑符号图。
除了具有十进制加法计数功能外,还具有异步复位、同步预置数和计数状态保持、对输入的时钟信号进行分频等功能。
CLRN 为异步复位端,LDN 为预置数控制端,A-D 为预置状态输入端,RCO 为进位输出端,ENT 和ENP 为工作状态控制端(双使能端)。
图2-1 74160逻辑符号图 表2-1 74160功能特性 表2-2是74160的功能表,它给出了各种控制信号作用下计数器的工作状态,具体如下。
序号 CLK CLRN LDN ENP ENT 工作状态 1 × 0 × × × 复位 2 ↑ 1 0 × × 预置数 3 ↑ 1 1 1 1 正常计数 4 × 1 1 × 0 保持,且C=0 5×110 1保持表2-2 74160的功能表⑴当CLRN=0时,无论其他功能端为何状态,计数器都将复位,有QD ~QA=0000(注:QD 为状态端最高位)。
⑵当CLRN=1、LDN=0时,计数器处于预置数状态。
在出现此情况后的第一个CLK 上升沿,将预置输入端加载的数据送入计数器,即有QD ~QA=D ~A(注:D 为置入端最高位)。
EDA-chap6
第6章 VHDL并行语句
?同步清零计数器。
若计数器采用同步清零,则敏感表中可无clr信号,此 时进程如下: PROCESS ( clk)
BEGIN
IF ( clk’EVENT AND clk =‘1’ ) THEN IF clr =‘0’ THEN ELSE END IF; END PROCESS;
13
PROCESS语句特点
1. PROCESS为一无限循环语句 2. PROCESS语句具有顺序/并行运行双重性 3. 进程必须由敏感信号的变化来启动 4. 信号是多个进程间的通信线 5. 一个进程中只允许描述对应于一个时钟 信号的同步时序逻辑
14
第6章 VHDL并行语句
2. 并行信号赋值语句
并行信号赋值语句是将一个数据或一个表达式的运算结果 送给一个数据对象,其赋值目标必须是信号而不能是变量。 信号赋值语句可以位于进程语句中,也可以在进程语句之 外。若出现在进程语句结构内,则属于顺序语句,否则为并 行信号赋值语句。 并行信号赋值语句有三种形式: 简单信号赋值语句
22
第6章 VHDL并行语句
(2)块语句的应用 利用块语句可以将结构体中的并行语句划分成 多个并行方式的子块,每一个子块都是一个独立的
设计实体,具有自己的类属参数和界面端口,以及
与外部环境的衔接描述。
块语句还可以实现嵌套,内层的块语句可以使
用外层块语句所定义的信号,但外层块语句不能使
用内层块语句定义的信号。
23
第6章 VHDL并行语句
【例5.3】试用块语句设计一个运算电路,包括一个 八位加法器和一个八位减法器。
运算电路的输入为A和B,输出为SUM(八位和)、SUB (八位差),以及进位CO和借位BO。
第六章_宏功能模块与IP应用
复习
P195~209
预习
第二次实验: 第二次实验:p120_4.5.2 2位十进制数字频率计 位十进制数字频率计 第三次实验: 第三次实验: 必做: 十六进制7段数码显示译码器设计 段数码显示译码器设计( 必做:p140_4-4 十六进制 段数码显示译码器设计(参 考本教材二版p143【例5-21】) 考本教材二版 【 】 选做: 数码扫描显示电路设计( 选做:p141_4-6 数码扫描显示电路设计(参考本教材 二版p144【例5-22】) 二版 【 】 第四次实验: 并行ADC采样控制电路实现和 第四次实验:p264_7-2 并行 采样控制电路实现和 硬件验证 第五/六次实验 设计型实验(自己选题) 六次实验: 第五 六次实验:设计型实验(自己选题)
一、正弦信号发生器结构
由FPGA实现 实现 RST EN CLK Q1 address Inclock q Q
四 个 组 成 部 分
1、7位地址信号发生器 、 位地址信号发生器 2、正弦信号数据存储器 、正弦信号数据存储器ROM 3、VHDL顶层文件 顶层文件SIN_GNT 、 顶层文件 4、8位D/A 、 位
LPM功能模块内容丰富,设计者可根据实际需要,选 功能模块内容丰富,设计者可根据实际需要, 功能模块内容丰富 择LPM库中的适当模块,并为其设定适当的参数,满足自 库中的适当模块,并为其设定适当的参数, 库中的适当模块 己的设计需求。 己的设计需求。
6.5.3 简易正弦信号发生器设计 简易正弦信号发生器设计
三、正弦信号数据存储器ROM的定制 正弦信号数据存储器ROM的定制 ROM
4. 按图示作选择
三、正弦信号数据存储器ROM的定制 正弦信号数据存储器ROM的定制 ROM
5. 按图示作选择
第6章 数字集成电路基本单元与版图5----Cadence EDA软件的使用
图 8 - 107 命令解释窗口
当所有的配置文件已读入时, 会显示“END OF SITE CUSTOMIZATION”信息, 指示软件启动成功。 每一次启动Cadence EDA软件, Cadence软件都会在用 户的工作目录下生成一个名为CDS.log的记录文件, 它 将出现在CIW窗口中的所有信息保存起来。 除了上面的CIW窗口, 还会有一个所谓的库 (Library)文件管理窗口, 在该窗口中会列出用户在 进行设计时所用到的所有库文件, 如图 8 - 108 所示。
对话框中填入layout, 然后点击OK。 此时会自动弹出
一个空白的Vituoso版图编辑窗口和一个绘图层选择窗 口LSW。 在LSW窗口中会显示指定IC生产工艺所具有
的诸如N阱、 P阱、 多晶硅等所有的掩模图层。 这两
个窗口如图8 - 124 所示。
图 8 - 124 Vituoso版图编辑窗口和绘图层选择窗口LSW
窗口中执行File→New→Cell View命令, 这将弹出一个
如图 8 - 110 所示的对话框, 点击Library Name右边的 按钮, 选中用户设计库ee560。 点击Tool右边的按钮,
选择Composer-Schematic工具包进行电路原理图的绘制,
同时要在Cell Name中键入电路原理图文件名inverter。 按下OK按钮后将自动弹出一个空白的电路原理图编辑
图的对比(LVS)了。 在进行LVS之前, 还需要设置
进行对比时所遵循的规则。 设置方法是:
图 8 – 129 由提取的参数生成的图案
在图 8 - 130 所示的窗口中, 执行 NCSU→Modify LVS Rules命令, 弹出一个有多种LVS 选项的窗口, 必须在该窗口中选中以下4项LVS规则: ·Allow FET Series Permutations (允许级联FET顺 序交换);
EDA技术与Verilog_HDL(潘松)第四章与第六章课后习题答案
4-5 用Verilog设计一个3-8译码器,要求分别用case语句和if_else语句。比 较这两种方式。
4-5 用Verilog设计一个3-8译码器,要求分别用case语句和if_else语句。比较这两 种方式。
module decoder3_8 ( G1 ,Y ,G2 ,A ,G3 ); input G1, G2, G3; wire G1, G2, G3; input [2:0] A ; wire [2:0] A ; output [7:0] Y ; reg [7:0] Y ; reg s; always @ ( A ,G1, G2, G3) begin s <= G2 | G3 ; if (G1 == 0) Y <= 8'b1111_1111; else if (s) Y <= 8'b1111_1111; else case ( A ) 3'b000: Y = 8'b11111110; 3'b001: Y = 8'b11111101; 3'b010: Y = 8'b11111011; 3'b011: Y = 8'b11110111; 3'b100: Y = 8'b11101111; 3'b101: Y = 8'b11011111; 3'b110: Y = 8'b10111111; 3'b111: Y = 8'b01111111; default:Y = 8'bxxxxxxxx; endcase end endmodule
reg [2:0]A ;
wire[7:0]Y ; reg G1 ,G2 ,G3;
decoder3_8 DUT ( G1 ,Y ,G2 ,A ,G3 );
EDA
ind(0) outd(2) outd(1) outd(0) 1 1 1
1
1 1
0
1 1
×
0 1
×
× 0
×
× ×
×
× ×
×
× ×
×
× ×
1
1 1
1
0 0
0
1 0
1
1 1 0
1
1 1 1
1
1 1 1
1
1 1 1
0
1 1 1
×
0 1 1
×
× 0 1
×
× × 1
0
0 0 0
1
1 0 0
1
0 1 0
注:表中×为任意项,可以取0或者1。输入信号为ind(7)~in(0),且为低有效输入,ind(7)优先级别最高,依此
elsif (sel= "10") then y<=input (2);
else y<=input (3); end if ; end process;
--当sel=10时,y=input(2)
--当sel=11时,y=input(3)
end behave;
mux4.vhd的仿真波形分析:在数据输入端input(3)~input(0)输入频率不相同的信号,当选
--定义输入信号ind(7..0) --定义输出信号outd(2..0) --定义实体名encoder83
--如果ind (7) = 0则outd= 111 --如果ind (7) =1且ind (6) =0则outd=110 --如果ind (7..5) =110则outd=101 --如果ind (7..4) =1110则outd=100 --如果ind (7..3) =11110则outd=011 --如果ind (7..2) =111110则outd=010 --如果ind (7..1) =1111110则outd=001 --如果ind (7..0) =11111110则outd=000
EDA简答题
第1 章作业(P9)
1.1简述EDA技术的发展历程,EDA技术的核心内容是什么?
1.2简述用EDA技术设计电路的设计流程。
1.3VHDL 有哪些主要特点?
1.4Verilog HDL 有哪些主要特点?
①采用verilog HDL进行电路设计的最大优点是设计与工艺无关系,这使得设计在进行电路设计时可以不必过多考虑工艺实现时的具体细节,只需要根据系统设计的要求施加不同的约束条件,即可设计出实际电路。
②能够在每个抽象层次的描述上对设计进行仿真验证,及时发现可能存在的设计错误,缩短设计周期,并保证整个设计过程的正确性;
③能够在不同的抽象层次上,如系统级、行为级、RTL(Register Transfer Level)级、门级和开关级,对设计系统进行精确而简练的描述;
1.5什么叫做“综合”?一般综合包括哪些过程?
1.7 简述“自顶向下”的设计流程。
第2章作业
A2.1 QuartusII 支持哪些EDA 设计功能(教材第10 页)
第3章作业(P95)
A3.1 信号与变量的区别有哪些?
A3.2 标准逻辑位(STD LOGIC)数据类型有哪些?
第5章作业
A5.1(1)常用的EDA 工具有哪些?
(2)简述ModelSim、Matlab/DSP builder、NiosII的主要功能。
第6章作业
A6.1、(1)什么是PLD?(2)什么是FPGA?
A6.2、(1)简述“在系统可编程”技术(2)在系统可编程技术是针对电路板和系统上那类元件编程的?
A6.3(1)什么是边界扫描测试技术?(2)边界扫描测试解决什么问题。
EDA技术与VHDL课后答案(第3版)潘松 黄继业
USE IEEE.STD_LOGIC_1164.ALL ;
ENTITY 8f_suber IS
PORT ( x0,x1,x2,x3,x4,x5,x6,x7 : IN STD_LOGIC ;
y0,y1,y2,y3,y4,y5,y6,y7 : IN STD_LOGIC ;
sub_in : IN STD_LOGIC ;
ELSIF u2_y<= u2_b ;
ELSE u2_y<= NULL ;
END IF ;
END PROCESS p_ MUX21A_u2 ;
u1_s<= s0 ; u1_a<= a2 ; u1_b<= a3 ;
tmp<= u1_y ;
u2_s<=s1 ; u2_a<= a1 ; u2_b<= tmp;
diff=>diff2 ) ;
u3 : f_suber PORT MAP (x=>x3, y=>y3, sub_in=>c, sub_out=>d,
diff=>diff3 ) ;
u4 : f_suber PORT MAP (x=>x4, y=>y4, sub_in=>d, sub_out=>e,
diff=>diff4 ) ;
sub_in x y
sub_out
diffr
0
x
0
y
0
f_suber
sub_in x y
sub_out
diffr
1
x
1
y
1
f_suber
sub_in x y
sub_out
diffr
eda教学1
EDA设计导论- PLD设计方法
设计已经从传统的自下而上的方法, 转变成自上而下的设计方法。传统上的设 计方法是自下而上的设计方法,是以固定 功能元件为基础,基于电路板的设计方法。 这种设计方法有下面的缺点:
第一章
系统调试、测试与性能分析
完整系统构成
设计依赖于设计人员的经验。
设计依赖于现有的通用元器件。
EDA 原理及应用
何宾 2008.09
E - mail: hebin@
课程进度安排:
56学时(课堂教学40学时,上机实验16学时) 课堂教学内容: 第1章-EDA设计导论 第2章-可编程逻辑器件设计方法 第3章-VHDL语言基础 第4章-数字逻辑单元设计 第5章-VHDL高级设计技术 第6章-基于HDL和原理图的设计输入 第7章-设计综合和行为仿真 第8章-设计实现和时序仿真 第9章-设计下载和调试 第10章-设计示例(数字钟、UART、数字电压表)
子系统设计的下载工具及硬件验证工具;
EDA设计导论- EDA技术涵义
● 大规模可编程逻辑器件(PLD)
第一章
现在所说的PLD器件一般包含现场可编程门阵列(FPGA)和复 杂可编程逻辑器件(CPLD)。
由于PLD的集成规模非常大,因此可利用先进的EDA工具进 行电子系统设计和产品开发。由于开发工具的通用性、设计语言的 标准化以及设计过程几乎与所用器件的硬件结构无关,因而设计开 发成功的各类逻辑功能块软件有很好的兼容性和可移植性。
EDA设计导论- EDA技术涵义
● 硬件描述语言
第一章
(5)支持的EDA工具:支持VHDL和Verilog的EDA工具很多,但 支持ABEL的综合器仅仅Dataio一家。
(6)国际化程度:VHDL和Verilog已成为IEEE标准,而ABEL正朝 国际化标准努力。在新世纪中,VHDL与Verilog语言将承担几乎全 部的数字系统设计任务。
EDA技术第6章
一、原理图与VHDL比较
原理图设计输入 输入效率较低,但容易实现仿真,便于电路的调整 设计较大规模系统时,显得繁琐且移植性差
VHDL输入 VHDL对设计的描述具有相对性,可以不考虑硬件的结构和最终实
文件夹中? 2. 最后对哪个程序进行期间分配、管脚分布、程序下载等步骤?
三、数字电子钟
➢ 要求 具有时、分、秒计数显示,24小时制; 具有清零的功能,能调整系统的小时、分钟;
➢ 模块划分 计数:秒计数、分计数、小时计数; 时间设置(将其写入分钟计数及时钟计数模块中) 译码(包括动态数码管选择、7段译码)
library ieee; use ieee.std_logic_1164. all;
entity cnt60 is port ( clk, clear, load, : in std_logic_vector ( 3 downto 0 ); cout : out std_logic;
qh , ql : out std_logic_vector ( 3 downto 0 )); end cnt60;
architecture one of cnt60 is signal tmph, tmpl : std_logic_vector ( 3 downto 0 ); begin
begin if clear=‘0’ then
else tmpl <= tmpl+1; end if;
?
end if;
end if;
end one;
qh <= tmph; ql <= tmpl; cout <= tmph(2) and tmph(0) and tmpl(3) and
EDA技术基础(2)--第6章 原理图编辑
6.2.8
1.选中图件
线路布局调整
图件放置完毕,连线前应合理移动位置,即先调整图件布局。 选中图件有以下几种方法。 ⑴ 通 过 菜 单 Edit→Select。 有 Inside Area( 框 内 ) 、 Outside Area( 框 外 ) 、 All( 所 有 ) 、 Net( 同 一 网 络 ) 和 Connection(管脚间实际连接),前两者可通过拉框选中,后两 者通过单击选中。 ⑵通过菜单Edit→Toggle Selection。当图件处于未选取状 态时,可选取图件;当图件处于选取状态时,可解除选取状态。 ⑶利用工具栏按钮 ,用鼠标拉框选取框内图件。 ⑷直接用鼠标的左键点取图件,用这种方法每次只能选取一 个图件。
EDA技术基础(第2版)
机械工业出版社同名教材 配套电子教案
制作:福建信息职业技术学院 郭勇 联系方式:gy_xs@
第6章
Protel99SE原理图编辑
本章要点 6.1 Protel99SE原理图编辑器 6.2 绘制一张简单的原理图 6.3 总线和网络标号的使用 6.4 层次电路图设计 6.5 电气规则检查与网络表生成 6.6 原理图元件设计 6.7 原理图输出
2.进入Protel99SE主界面
启动Protel99SE,进入Protel99SE主窗口,如图6-1所示。 执行File→New建立新的设计数据库,屏幕弹出图6-2所示的 对话框,在Database File Name栏中输入新数据库文件名,系统 默认“MyDesign.ddb”,单击【Browse】可以修改文件的保存位 置;单击Password选项卡可进行密码设置。
设置完毕,单击【OK】进入设计主窗口,如图6-3所示。
6.1.2
启动原理图编辑器
第6章 16位CISC CPU设计
康芯科技
6.1 顶层系统设计
2. 顶层文件的原理图设计
KX
康芯科技
图6-5 CPU顶层结构图(详细内容浏览) 顶层结构图(详细内容浏览 ) 顶层结构图
KX
康芯科技
6.1 顶层系统设计
顶层结构的VHDL VHDL设计 6.1.3 顶层结构的VHDL设计
3.CPU与LCD显示模块的接口 CPU与LCD显CPU基本部件设计
KX
康芯科技
CPU基本部件设计 6.2 CPU基本部件设计
运算器ALU 6.2.1 运算器ALU
⑴ ⑵ ⑶
⑷
⑸ ⑹ ⑺ ⑻ ⑼
⑽
⑾
运算器ALU的仿真波形 图6-9 运算器 的仿真波形
KX
康芯科技
CPU基本部件设计 6.2 CPU基本部件设计
运算器ALU 6.2.1 运算器ALU
显示模块dsp的实体结构图 图6-6 显示模块 的实体结构图
KX
康芯科技
6.1 顶层系统设计
顶层结构的VHDL VHDL设计 6.1.3 顶层结构的VHDL设计
3.CPU与LCD显示模块的接口 CPU与LCD显示模块的接口
图6-7 LCD显示屏的数据显示 显示屏的数据显示
KX
康芯科技
6.1 顶层系统设计
KX
康芯科技
CPU基本部件设计 6.2 CPU基本部件设计
运算器ALU 6.2.1 运算器ALU
运算器ALU的功能 表6-5 运算器 的功能 Sel 输入 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 C=A C=A AND B C=A OR B C=NOT A C=A XOR B C=A + B C=A – B C=A + 1 C=A – 1 C=0 操作 说明 通过PASS 通过 与 或 非 异或 加法 减法 加1 减1 清0
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
阻塞赋值与非阻塞赋值
非阻塞赋值仿真波形图
阻塞赋值仿真波形图
阻塞赋值与非阻塞赋值
非阻塞赋值综合结果
阻塞赋值综合结果
6.4 条件语句
( if-else语句) if-else语句使用方法有以下3种:
(1)if(表达式) 语句1; (2)if(表达式) 语句1; else 语句2; (3)if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; …… else if(表达式n) 语句n; else 语句n+1;
第6章 Verilog行为语句
主要内容
◆ 过程语句(initial、always) ◆ 块语句(begin-end、fork-join) ◆ 赋值语句(assign、=、<=) ◆ 条件语句(if-else、case、casez、casex) ◆ 循环语句(for、forever、repeat、while) ◆ 编译指示语句( `define、`include、`ifdef、 `else、`endif) ◆ 任务(task)与 函数(function) ◆ 顺序执行与并发执行
for loop
initial begin for(i=0;i<4;i=i+1) out = out +1; end
repeat loop
initial begin repeat(5) out = out +1; end
while loop
initial begin i=0; while(i<0) i=i+1; end
for语句
for语句的使用格式如下(同C语言): for(表达式1;表达式2;表达式3)语句; 即: for(循环变量赋初值;循环结束条件;循 环变量增值)执行语句;
用for语句描述七人投票表决器
module voter7(pass,vote); output pass; input[6:0] vote; reg[2:0] sum;integer i;reg pass; always @(vote) begin sum=0; for(i=0;i<=6;i=i+1) //for语句 if(vote[i]) sum=sum+1; if(sum[2]) pass=1; //超过4人赞成,则通过 else pass=0; end endmodule
always过程语句使用模板
always @(<敏感信号表达式event-expression>)
begin //过程赋值 //if-else,case,casex,casez选择语句 //while,repeat,for循环 //task,function调用 end “always”过程语句通常是带有触发条件的,触发条件写 在敏感信号表达式中,只有当触发条件满足时,其后
敏感信号列表举例
4选1数据选择器
module mux4_1(out,in0,in1,in2,in3,sel); output out; input in0,in1,in2,in3; input[1:0] sel; reg out; always @(in0 or in1 or in2 or in3 or sel) //敏感信号列表 case(sel) 2'b00: out=in0; 2'b01: out=in1; 2'b10: out=in2; 2'b11: out=in3; default: out=2'bx; endcase endmodule
posedge和negedge关键字
对于时序电路,事件通常是由时钟边沿触发的,为表达边 沿这个概念,Verilog提供了posedge和negedge关键字来描 述。比如: 【例】同步置数、同步清零的计数器 module count(out,data,load,reset,clk); output[7:0] out; input[7:0] data; input load,clk,reset; reg[7:0] out; always @(posedge clk) //clk上升沿触发 begin if(!reset) out=8'h00; //同步清0,低电平有效 else if(load) out=data; //同步预置 else out=out+1; //计数 end endmodule
6.5 循环语句
在Verilog中存在四种类型的循环语句,用来控制语句的执行次数。这四 种语句分别为: (1)forever:连续地执行语句;多用在“initial”块中,以生成时钟等周 期性波形。 (2)repeat:连续执行一条语句n次。 (3)while:执行一条语句直到某个条件不满足。 (4)for:有条件的循环语句。
的“begin-end”块语句才能被执行。
敏感信号表达式
敏感信号表达式又称事件表达式或敏感信号列表, 即当该表达式中变量的值改变时,就会引发块内 语句的执行。因此敏感信号表达式中应列出影响 块内取值的所有信号。若有两个或两个以上信号 时,它们之间用“or”连接。
例如: @(a) //当信号a的值发生改变 @(a or b) //当信号a或信号b的值发生改变 @(posedge clock) //当clock 的上升沿到来时 @(negedge clock) //当clock 的下降沿到来时 @(posedge clk or negedge reset) //当clk的上升沿到来或reset信号的下降沿到来
case语句
case语句的使用格式如下。
case (敏感表达式) 值1: 语句1; //case分支项 值2: 语句2; …… 值n: 语句n; default:语句n+1; endcase
BCD码—七段数码管显示译码器
module decode4_7(decodeout,indec); output[6:0] decodeout; input[3:0] indec; reg[6:0] decodeout; always @(indec) begin case(indec) //用case语句进行译码 4'd0:decodeout=7'b1111110; 4'd1:decodeout=7'b0110000; 4'd2:decodeout=7'b1101101; 4'd3:decodeout=7'b1111001; 4'd4:decodeout=7'b0110011; 4'd5:decodeout=7'b1011011; 4'd6:decodeout=7'b1011111; 4'd7:decodeout=7'b1110000; 4'd8:decodeout=7'b1111111; 4'd9:decodeout=7'b1111011; default: decodeout=7'bx; endcase end endmodule
(1)非阻塞(non_blocking)赋值方式 赋值符号为“<=”, 如:b<= a; 非阻塞赋值在整个过程块结束时才完成赋值操作,即b的 值并不是立刻就改变的。 (2)阻塞(blocking)赋值方式 赋值符号为“=”, 如:b= a;
阻塞赋值在该语句结束时就立即完成赋值操作,即b的值 在该条语句结束后立刻改变。如果在一个块语句中,有多条 阻塞赋值语句,那么在前面的赋值语句没有完成之前,后面 的语句就不能被执行,仿佛被阻塞了(blocking)一样,因 此称为阻塞赋值方式。
Verilog HDL行为语句
类别 initial 过程语句 块语句 always 串行块begin-end 并行块fork-join √ √ 语句 可综合性
赋值语句
持续赋值assign
过程赋值=、<= if-else
√
√ √ √ √
条件语句 循环语句
case for repeat while forever
宏替换`define
`define语句用于将一个简单的名字或标志符(或称
为宏名)来代替一个复杂的名字或字符串,其使用 格式为: `define 宏名(标志符) 字符串 如:`define sum ina+inb+inc+ind
在上面的语句中,用简单的宏名sum来代替了一个
复杂的表达式ina+inb+inc+ind,采用了这样的定 义形式后,在后面的程序中,就可以直接用sum来 代表表达式ina+inbontinuous Assignments)
assign为持续赋值语句,主要用于对wire型变量的赋值。 比如:assign c=a&b;
在上面的赋值中,a、b、c三个变量皆为wire型变量,a和 b信号的任何变化,都将随时反映到c上来。
过程赋值语句
过程赋值语句多用于对reg型变量进行赋值。
6.2 块语句
块语句是由块标志符begin-end或fork-join界定的一组语句, 当块语句只包含一条语句时,块标志符可以缺省。 begin-end串行块中的语句按串行方式顺序执行。比如: begin regb=rega; regc=regb; end 由于 begin-end 块内的语句顺序执行,在最后,将 regb、 regc 的值都更新为 rega 的值,该 begin-end 块执行完后, regb、regc 的值是相同的。
repeat语句
repeat语句的使用格式为: repeat(循环次数表达式) 语句; 或 repeat(循环次数表达式) begin …… end
用repeat实现8位二进制数乘法
module mult_repeat(outcome, a, b); parameter size=8; input[size:1] a,b; output[2*size:1] outcome; reg[2*size:1] temp_a,outcome; reg[size:1] temp_b; always @(a or b) begin outcome=0; temp_a=a; temp_b=b; repeat(size) //repeat语句,size为循环次数 begin if(temp_b[1]) //如果temp_b的最低位为1,就执行下面的加法 outcome=outcome +temp_a; temp_a=temp_a<<1; //操作数a左移一位 temp_b=temp_b>>1; //操作数b右移一位 end end endmodule