EDA技术与Verilog设计第六章课后习题部分答案
EDA技术与应用课后习题答案
EDA技术与应用课后习题答案EDA技术与应用课后习题答案第一章1-1 EDA技术与ASIC设计和FPGA开发有什么关系? P3~4答:利用EDA技术进行电子系统设计的最后目标是完成专用集成电路ASIC 的设计和实现;FPGA和CPLD是实现这一途径的主流器件。
FPGA和CPLD通常也被称为可编程专用IC,或可编程ASIC。
FPGA和CPLD的应用是EDA技术有机融合软硬件电子设计技术、SoC(片上系统)和ASIC设计,以及对自动设计与自动实现最典型的诠释。
1-2与软件描述语言相比,VHDL有什么特点? P6答:编译器将软件程序翻译成基于某种特定CPU的机器代码,这种代码仅限于这种CPU而不能移植,并且机器代码不代表硬件结构,更不能改变CPU的硬件结构,只能被动地为其特定的硬件电路结构所利用。
综合器将VHDL程序转化的目标是底层的电路结构网表文件,这种满足VHDL设计程序功能描述的电路结构,不依赖于任何特定硬件环境;具有相对独立性。
综合器在将VHDL(硬件描述语言)表达的电路功能转化成具体的电路结构网表过程中,具有明显的能动性和创造性,它不是机械的一一对应式的“翻译”,而是根据设计库、工艺库以及预先设置的各类约束条件,选择最优的方式完成电路结构的设计。
l-3什么是综合?有哪些类型?综合在电子设计自动化中的地位是什么? P5 什么是综合? 答:在电子设计领域中综合的概念可以表示为:将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。
有哪些类型? 答:(1)从自然语言转换到VHDL语言算法表示,即自然语言综合。
(2)从算法表示转换到寄存器传输级(RegisterTransport Level,RTL),即从行为域到结构域的综合,即行为综合。
(3)从RTL级表示转换到逻辑门(包括触发器)的表示,即逻辑综合。
(4)从逻辑门表示转换到版图表示(ASIC设计),或转换到FPGA的配置网表文件,可称为版图综合或结构综合。
EDA技术实用教程-VHDL版课后答案
第一章1-1 EDA技术与ASIC设计和FPGA开发有什么关系? P3~4答:利用EDA技术进行电子系统设计的最后目标是完成专用集成电路ASIC的设计和实现;FPGA和CPLD是实现这一途径的主流器件。
FPGA和CPLD通常也被称为可编程专用IC,或可编程ASIC。
FPGA和CPLD的应用是EDA技术有机融合软硬件电子设计技术、SoC(片上系统)和ASIC设计,以及对自动设计与自动实现最典型的诠释。
1-2与软件描述语言相比,VHDL有什么特点? P6答:编译器将软件程序翻译成基于某种特定CPU的机器代码,这种代码仅限于这种CPU而不能移植,并且机器代码不代表硬件结构,更不能改变CPU的硬件结构,只能被动地为其特定的硬件电路结构所利用。
综合器将VHDL 程序转化的目标是底层的电路结构网表文件,这种满足VHDL设计程序功能描述的电路结构,不依赖于任何特定硬件环境;具有相对独立性。
综合器在将VHDL(硬件描述语言)表达的电路功能转化成具体的电路结构网表过程中,具有明显的能动性和创造性,它不是机械的一一对应式的“翻译”,而是根据设计库、工艺库以及预先设置的各类约束条件,选择最优的方式完成电路结构的设计。
l-3什么是综合?有哪些类型?综合在电子设计自动化中的地位是什么? P5什么是综合? 答:在电子设计领域中综合的概念可以表示为:将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。
有哪些类型? 答:(1)从自然语言转换到VHDL语言算法表示,即自然语言综合。
(2)从算法表示转换到寄存器传输级(RegisterTransport Level,RTL),即从行为域到结构域的综合,即行为综合。
(3)从RTL级表示转换到逻辑门(包括触发器)的表示,即逻辑综合。
(4)从逻辑门表示转换到版图表示(ASIC设计),或转换到FPGA的配置网表文件,可称为版图综合或结构综合。
综合在电子设计自动化中的地位是什么? 答:是核心地位(见图1-3)。
EDA技术与VHDL程序设计基础教程习题答案
EDA技术与VHDL程序设计基础教程习题答案EDA技术与VHDL程序设计基础教程习题答案第1章EDA习题答案1.8.1填空1.EDA的英文全称是Electronic Design Automation2.EDA技术经历了计算机辅助设计CAD阶段、计算机辅助工程设计CAE阶段、现代电子系统设计自动化EDA阶段三个发展阶段3. EDA技术的应用可概括为PCB设计、ASIC设计、CPLD/FPGA 设计三个方向4.目前比较流行的主流厂家的EDA软件有Quartus II、ISE、ModelSim、ispLEVER5.常用的设计输入方式有原理图输入、文本输入、状态机输入6.常用的硬件描述语言有VHDL、V erilog7.逻辑综合后生成的网表文件为EDIF8.布局布线主要完成将综合器生成的网表文件转换成所需的下载文件9.时序仿真较功能仿真多考虑了器件的物理模型参数10.常用的第三方EDA工具软件有Synplify/Synplify Pro、Leonardo Spectrum1.8.2选择1.EDA技术发展历程的正确描述为(A)A CAD->CAE->EDAB EDA->CAD->CAEC EDA->CAE->CADD CAE->CAD->EDA2.Altera的第四代EDA集成开发环境为(C)A ModelsimB MUX+Plus IIC Quartus IID ISE3.下列EDA工具中,支持状态图输入方式的是(B)A Quartus IIB ISEC ispDesignEXPERTD Syplify Pro4.下列几种仿真中考虑了物理模型参数的仿真是(A)A时序仿真B 功能仿真C 行为仿真D 逻辑仿真5.下列描述EDA工程设计流程正确的是(C)A输入->综合->布线->下载->仿真B布线->仿真->下载->输入->综合C输入->综合->布线->仿真->下载D输入->仿真->综合->布线->下载6.下列编程语言中不属于硬件描述语言的是(D)A VHDLB V erilogC ABELD PHP1.8.3问答1.结合本章学习的知识,简述什么是EDA技术?谈谈自己对EDA 技术的认识?答:EDA(Electronic Design Automation)工程是现代电子信息工程领域中一门发展迅速的新技术。
EDA技术与Verilog设计第六章课后习题部分答案
6-15
6-16
设计一个74161的电路。
6-16
注意:异步清零、同步置位
CO= Q3 Q2 Q1 Q0 CTT
6-16
module wytest(reset,load,ctt,ctp,clk,data_in,out,co);//习题6-16 input reset,load,ctt,ctp,clk; input[3:0] data_in; output[3:0] out; output co; reg[3:0] out; reg co; always@(posedge clk or negedge reset) if(!reset) begin out<=4'b0; co<=1'b0; end else if(!load) out<=data_in; else if(!ctt) out<=out; else if(!ctp) out<=out;
always@(posedge clk) begin firsta[3:0]<=a[7:4]; seconda[3:0]<=a[3:0]; firstb[3:0]<=b[7:4]; secondb[3:0]<=b[3:0]; end
mul4x4 m1(outa, firsta,firstb,clk), m2(outb, seconda,firstb,clk), m3(outc, firsta,secondb,clk), m4(outd,seconda,secondb,clk);
6-13
6-14
试编写一个实现3输入与非门的verilog程序;
module
wytest(a,o); a;
2023年大学_EDA技术与VHDL第二版(潘松著)课后习题答案下载
2023年EDA技术与VHDL第二版(潘松著)课后习题答案下载EDA技术与VHDL第二版(潘松著)课后答案下载第1章 EDA技术概述1.1 EDA技术及其发展1.1.1 EDA技术的发展1.1.2 EDA技术的涵义1.1.3 EDA技术的基本特征1.2 EDA技术的主要内容及主要的EDA厂商1.2.1 EDA技术的主要内容1.2.2 主要EDA厂商概述1.3 EDA技术实现目标1.3.1 超大规模可编程逻辑器件1.3.2 半定制或全定制ASIC1.3.3 混合ASIC1.4 EDA技术应用1.4.1 EDA技术应用形式1.4.2 EDA技术应用场合1.5 EDA技术的发展趋势1.5.1 可编程器件的发展趋势1.5.2 软件开发工具的发展趋势1.5.3 输入方式的发展趋势__小结思考题和习题第2章大规模可编程逻辑器件2.1 可编程逻辑器件概述2.1.1 PLD的'发展进程2.1.2 PLD的种类及分类方法2.2 简单可编程逻辑器件2.2.1 PLD电路的表示方法及有关符号 2.2.2 PROM基本结构2.2.3 PLA基本结构2.2.4 PAL基本结构2.2.5 GAL基本结构2.3 复杂可编程逻辑器件2.3.1 CPLD基本结构2.3.2 Altera公司器件2.4 现场可编程逻辑器件2.4.1 FPGA整体结构2.4.2 Xilinx公司FPGA器件2.5 在系统可编程逻辑器件2.5.1 ispLSl/pLSl的结构2.5.2 Lattice公司ispLSI系列器件 2.6 FPGA和CPLD的开发应用2.6.1 CPLD和FPGA的编程与配置2.6.2 FPGA和CPLD的性能比较2.6.3 FPGA和CPLD的应用选择__小结思考题和习题第3章 EDA设计流程与开发3.1 EDA设计流程3.1.1 设计输入3.1.2 综合3.1.3 适配3.1.4 时序仿真与功能仿真3.1.5 编程下载3.1.6 硬件测试3.2 ASIC及其设计流程3.2.1 ASIC设计方法3.2.2 一般的ASIC设计流程3.3 可编程逻辑器件的开发环境 3.4 硬件描述语言3.5 IP核__小结思考题和习题第4章硬件描述语言VHDL4.1 VHDL概述4.1.1 VHDL的发展历程4.1.2 VHDL的特点4.2 VHDL程序基本结构4.2.1 实体4.2.2 结构体4.2.3 库4.2.4 程序包4.2.5 配置4.3 VHDL基本要素4.3.1 文字规则4.3.2 数据对象4.3.3 数据类型4.3.4 运算操作符4.3.5 VHDL结构体描述方式 4.4 VHDL顺序语句4.4.1 赋值语句4.4.2 IF语句4.4.3 等待和断言语句4.4.4 cASE语句4.4.5 LOOP语句4.4.6 RETIARN语句4.4.7 过程调用语句4.4.8 REPORT语句4.5 VHDL并行语句4.5.1 进程语句4.5.2 块语句4.5.3 并行信号代人语句4.5.4 并行过程调用语句4.5.5 并行断言语句4.5.6 参数传递语句4.5.7 元件例化语句__小结思考题和习题第5章 QuartusⅡ软件及其应用5.1 基本设计流程5.1.1 建立工作库文件夹和编辑设计文件 5.1.2 创建工程5.1.3 编译前设计5.1.4 全程编译5.1.5 时序仿真5.1.6 应用RTL电路图观察器5.2 引脚设置和下载5.2.1 引脚锁定5.2.2 配置文件下载5.2.3 AS模式编程配置器件5.2.4 JTAG间接模式编程配置器件5.2.5 USBBlaster编程配置器件使用方法 __小结思考题和习题第6章 VHDL应用实例6.1 组合逻辑电路设计6.1.1 基本门电路设计6.1.2 译码器设计6.1.3 数据选择器设计6.1.4 三态门设计6.1.5 编码器设计6.1.6 数值比较器设计6.2 时序逻辑电路设计6.2.1 时钟信号和复位信号6.2.2 触发器设计6.2.3 寄存器和移位寄存器设计6.2.4 计数器设计6.2.5 存储器设计6.3 综合实例——数字秒表的设计__小结思考题和习题第7章状态机设计7.1 一般有限状态机7.1.1 数据类型定义语句7.1.2 为什么要使用状态机 7.1.3 一般有限状态机的设计 7.2 Moore型有限状态机设计 7.2.1 多进程有限状态机7.2.2 单进程有限状态机7.3 Mealy型有限状态机7.4 状态编码7.4.1 状态位直接输出型编码 7.4.2 顺序编码7.4.3 一位热码编码7.5 状态机处理__小结思考题和习题第8章 EDlA实验开发系统8.1 GW48型实验开发系统原理与应用8.1.1 系统性能及使用注意事项8.1.2 GW48系统主板结构与使用方法8.2 实验电路结构图8.2.1 实验电路信号资源符号图说明8.2.2 各实验电路结构图特点与适用范围简述8.3 GW48CK/GK/EK/PK2系统信号名与芯片引脚对照表 __小结思考题和习题第9章 EnA技术实验实验一:全加器的设计实验二:4位加减法器的设计实验三:基本D触发器的设计实验四:同步清零计数器的设计实验五:基本移位寄存器的设计串人/串出移位寄存器实验六:同步预置数串行输出移位寄存器的设计实验七:半整数分频器的设计实验八:音乐发生器的设计实验九:交通灯控制器的设计实验十:数字时钟的设计EDA技术与VHDL第二版(潘松著):内容简介《EDA技术与VHDL》主要内容有Altera公司可编程器件及器件的选用、QuartusⅡ开发工具的使用;VHDL硬件描述语言及丰富的数字电路和电子数字系统EDA设计实例。
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技术及应用习题参考答案
习题参考答案第2章1.可编程只读存储器PROM、可编程逻辑阵列PLA、可编程阵列逻辑PAL、通用阵列逻辑GAL2.EPC型号的存储器3.(1)编程输入(2)编译若编译不成功,需要回到第一步检查编程输入,直到编译成功为止(3)仿真仿真的结果直接反映编程的结果,若结果不正确,也需要返回到第一步,重复前面的过程(4)下载4.FPGA采用SRAM进行功能配置,可重复编程,但系统掉电后,SRAM中的数据丢失。
因此,需在FPGA外加EPROM,将配置数据写入其中,系统每次上电自动将数据引入SRAM中。
CPLD器件一般采用EEPROM存储技术,可重复编程,并且系统掉电后,EEPROM中的数据不会丢失,适于数据的保密。
FPGA器件含有丰富的触发器资源,易于实现时序逻辑,如果要求实现较复杂的组合电路则需要几个CLB结合起来实现。
CPLD的与或阵列结构,使其适于实现大规模的组合功能,但触发器资源相对较少。
5.67.宏单元、PIA、I/O控制块8.MAX7000系列一般采用EEPROM存储技术,可重复编程,并且系统掉电后,EEPROM中的数据不会丢失,适于数据的保密。
但是编写次数有限,编程的速度不快;FLEX10K系列采用SRAM进行功能配置,可重复编程,但系统掉电后,SRAM中的数据丢失。
因此,需在FPGA外加专用配置芯片,将配置数据写入其中,系统每次上电自动将数据引入专用配置芯片中。
第3章1.设计输入、项目编译、仿真和定时分析、编程下载2.(1)原理图输入适合于对系统电路很熟悉的情况或用在对时间特性要求较高的场合;(2)波形图输入适用于时序逻辑和有重复性的逻辑函数;(3)文本输入适用于从逻辑门层次的描述到整个系统的描述。
;(4)层次化输入适用于结构较复杂的系统。
3.优点:(1)支持模块化,底层模块可反复被调用,多个底层模块可由不同的设计者同时使用,提高了设计效率;(2)设计方法比较自由;(3)团队之间的合作方便灵活。
EDA技术与应用课后习题答案(6)
EDA技术与应⽤课后习题答案(6)EDA技术与应⽤课后习题答案 CLK: IN STD_LOGIC; --状态机⼯作时钟 EOC: IN STD_LOGIC; --转换状态指⽰,低电平表⽰正在转换 ALE:OUT STD_LOGIC; --8个模拟信号通道地址锁存信号 START:OUT STD_LOGIC; --转换开始信号 OE:OUT STD_LOGIC; --数据输出三态控制信号 ADDA:OUT STD_LOGIC; --信号通道最低位控制信号 LOCK0:OUT STD_LOGIC; --观察数据锁存时钟 Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); --8位数据输出 END ADCINT; ARCHITECTURE behav OF ADCINT IS TYPE states IS(st0,st1,St2,st3,st4); --定义各状态⼦类型 SIGNAL current_state,next_state: states:=st0; SIGNAL REGL: STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL LOCK: STD_LOGIC;--转换后数据输出锁存时钟信号 BEGIN ADDA<='1';--当ADDA<='0',模拟信号进⼊通道IN0;当ADDA<='1',则进⼊通道INI Q<=REGL;LOCK0<=LOCK; COM: PROCESS(current_state,EOC) BEGIN --规定各状态转换⽅式 CASE current_state IS WHEN st0=> ALE<='0';START<='0';LOCK<='0';OE<='0'; next_state<=st1; --0809初始化 WHEN st1=> ALE<='1';START<='1';LOCK<='0';OE<='0'; next_state<=st2 ;--启动采样 WHEN st2=> ALE<='0';START<='0';LOCK<='0'; OE<='0'; IF(EOC='1') THEN next_state<=st3;--EOC=1表明转换结束 ELSE next_state<=st2; END IF; --转换未结束,继续等待 WHEN st3=> ALE<='0';START<='0';LOCK<='0';OE<='1'; next_state<=st4;--开启OE,输出转换好的数据 WHEN st4=> ALE<='0';START<='0';LOCK<='1';OE<='1';next_state<=st0; WHEN OTHERS=>next_state<=st0; END CASE; END PROCESS COM; REG:PROCESS(CLK) BEGIN IF(CLK'EVENT AND CLK='1') THEN current_state<=next_state; END IF; END PROCESS REG; --由信号current_state将当前状态值带出此进程:REG LATCH1: PROCESS(LOCK) --此进程中,在LOCK的上升沿,将转换好的数据锁⼊ BEGIN IF LOCK='1' AND LOCK'EVENT THEN REGL<=D; END IF; END PROCESS LATCH1; END behav; 8-5在不改变原代码功能的条件下⽤两种⽅法改写例8-2,使其输出的控制信号(ALE、START、OE、LOCK)没有⽑刺。
EDA课后习题答案
1-5 叙述EDA的FPGA/CPLD设计流程,以及涉及的EDA工具及其在整个流 程中的作用。 答:完整地了解利用EDA技术进行设计开发的流程对于正确地选择和使用 EDA软件、优化设计项目、提高设计效率十分有益。一个完整的、典型的 EDA设计流程既是自顶向下设计方法的具体实施途径,也是EDA工具软件 本身的组成结构。
1-4 IP在EDA技术的应用和发展中的意义是什么? 答:IP就是知识产权核或知识产权模块的意思,在EDA技术和开 发中具有十分重要的地位。美国著名的Dataquest咨询公司将半 导体产业的IP定义为“用于ASIC或FPGA中的预先设计好的电路功 能模块”。IP分软IP、固IP和硬IP。 软IP是用HDL等硬件描述语言描述的功能块,但是并不涉 及用什么具体电路元件实现这些功能。 固IP是完成了综合的功能块。它有较大的设计深度,以网 表文件的形式提交客户使用。 硬IP提供设计的最终阶段产品——掩模。随着设计深度的 提高,后续工序所需要做的事情就越少;当然,灵活性也就越小。 不同的客户可以根据自己的需要订购不同的IP产品。
1-9 为什么说用逻辑门作为衡量逻辑资源大小的最小单元不准确。 答:专业习惯是将OLMC及左侧的可编程与阵列合称一个逻辑宏单元,即标 志PLD器件逻辑资源的最小单元,由此可以认为GAL16V8器件的逻辑资源是 8个逻辑宏单元,而目前最大的FPGA的逻辑资源达数十万个逻辑宏单元。也 有将逻辑门的数量作为衡量逻辑器件资源的最小单元,如某CPLD的资源约 2000门等,但此类划分方法误差较大。 1-10 标志FPGA/CPLD逻辑资源的逻辑宏单元包含哪些结构? 答: CPLD( MAX7000S)系列中的 逻辑宏单元由3个功能块组成:逻辑阵列、 乘积项选择矩阵和可编程寄存器,它们可以被单独地配置为时序逻辑和组合逻 辑工作方式。其中逻辑阵列实现组合逻辑,可以给每个逻辑宏单元提供5个乘 积项。“乘积项选择矩阵”分配这些乘积项作为到“或门”和“异或门”的主 要逻辑输入,以实现组合逻辑函数;或者把这些乘积项作为宏单元中寄存器的 辅助输入:清零(Clear)、置位(Preset)、时钟(Clock)和时钟使能控制 (Clock Enable)。 FPGA(Cyclone III)器件的可编程资源主要来自逻辑阵列块LAB,而每个LAB都 由多个逻辑宏单元(Logic Element,LE)构成。LE是Cyclone III FPGA器件 的最基本的可编程单元,LE主要由一个4输入的查找表LUT、进位链逻辑、寄 存器链逻辑和一个可编程的寄存器构成。
EDA技术与VHDL(第2版)习题解答
第3章 VHDL 基础3-1 如图所示inputoutputenablebuf3smux21in0in1outputsel3-2程序: IF_THEN 语句 LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ; ENTITY mux21 SPORT ( s1,s0 : IN STD_LOGIC_VECTOR ; a,b,c,d : IN STD_LOGIC ; y : OUT STD_LOGIC ) ; END ENTITY mux21 ;ARCHITECTURE one OF mux21 IS BEGINPROCESS ( s0,s1,a,b,c,d ) BEGINIF s1=‟0‟ AND s0=‟0‟ THEN y<=a ; ELSIF s1=‟0‟ AND s0=‟1‟ THEN y<=b ; ELSIF s1=‟1‟ AND s0=‟0‟ THEN y<=c ; ELSIF s1=‟1‟ AND s0=‟1‟ THEN y<=d ; ELSE y<=NULL ; END IF ;END PROCESS ; END ARCHITECTURE one ;CASE 语句LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ; ENTITY mux21 ISPORT ( s1,s0 : IN STD_LOGIC_VECTOR ;a,b,c,d : IN STD_LOGIC ;y : OUT STD_LOGIC ) ;END ENTITY mux21 ;ARCHITECTURE two OF mux21 ISSIGNAL s : STD_LOGIC_VECTOR ( 1 DOWNTO 0 ) ;BEGINs<=s1 & s0 ;PROCESS ( s )BEGINCASE s ISWHEN “00” => y<=a ;WHEN “01” => y<=b ;WHEN “10” => y<=c ;WHEN “11” => y<=d ;WHEN OTHERS => NULL ;END CASE ;END PROCESS ;END ARCHITECTURE two ;3-3 程序:LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY MUXK ISPORT ( s0,s1 : IN STD_LOGIC ;a1,a2,a3 : IN STD_LOGIC ;outy : OUT STD_LOGIC ) ;END ENTITY MUXK ;ARCHITECTURE double OF MUXK ISSIGNAL tmp : STD_LOGIC ; --内部连接线SIGNAL u1_s, u1_a, u1_b, u1_y : STD_LOGIC ;SIGNAL u2_s, u2_a, u2_b, u2_y : STD_LOGIC ;BEGINp_MUX21A_u1 : PROCESS ( u1_s, u1_a, u1_b, u1_y )BEGINCASE u1_s ISWHEN …0‟ => u1_y<= u1_a ;WHEN …1‟ => u1_y<= u1_b ; WHEN OTHERS => NULL ; END CASE ;END PROCESS p_ MUX21A_u1 ;p_ MUX21A_u2 : PROCESS ( u2_s, u2_a, u2_b, u2_y ) BEGINCASE u2_s ISWHEN …0‟ => u2_y<= u2_a ;WHEN …1‟ => u2_y<= u2_b ; WHEN OTHERS => NULL ; END CASE ;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; outy <= u2_y ;END ARCHITECTURE double ; 3-4 程序:(1)1位半减器x y 00011011被减数减数高位低位0000s_out diff 111 s_out= x · y diff= x · y + x · y(2)1位半减器的设计选用(2)图,两种表达方式:一、LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY h_suber ISPORT ( x,y : IN STD_LOGIC ;s_out ,diff : OUT STD_LOGIC ) ;END ENTITY h_suber ;ARCHITECTURE fhd1 OF h_suber ISBEGINdiff<=x XOR y ; s_out<= ( NOT a ) AND b ;END ARCHITECTURE fhd1 ;二、LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY h_suber ISPORT ( x,y : IN STD_LOGIC ;s_out ,diff : OUT STD_LOGIC ) ;END ENTITY h_suber ;ARCHITECTURE fhd1 OF h_suber ISSIGNAL s : STD_LOGIC_VECTOR ( 1 DOWNTO 0 ) ;BEGINs<= x & y ;PROCESS ( s )BEGINCASE s ISWHEN “00” => s_out <=‟0‟ ; diff<=‟0‟ ;WHEN “01” => s_out <=‟1‟ ; diff<=‟1‟ ;WHEN “10” => s_out <=‟0‟ ; diff<=‟1‟ ;WHEN “11” => s_out <=‟0‟ ; diff<=‟0‟ ;WHEN OTHERS => NULL ;END CASE ;END PROCESS ;LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY or ISPORT ( a,b : IN STD_LOGIC ;c : OUT STD_LOGIC ) ;END ENTITY or ;ARCHITECTURE one OF or ISBEGINc<= a OR b ;END ARCHITECTURE one ;1位全减器:LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY f_suber ISPORT ( x,y,sub_in : IN STD_LOGIC ;sub_out ,diffr : OUT STD_LOGIC ) ;END ENTITY f_suber ;ARCHITECTURE fhd1 OF f_suber ISCOMPONENT h_suber ISPORT ( x,y : IN STD_LOGIC ;s_out ,diff : OUT STD_LOGIC ) ;END COMPONENT h_suber ;COMPONENT or ISPORT ( a,b : IN STD_LOGIC ;c : OUT STD_LOGIC ) ;END COMPONENT or ;SIGNAL d,e,f : STD_LOGIC ;BEGINu1 : h_suber PORT MAP ( x=>x, y=>y, diff=>d, s_out=>e ) ;u2 : h_suber PORT MAP ( x=>d, y=>sub_in, diff=>diffr, s_out=>f ) ;u3 : or PORT MAP ( a=>f, b=>e, c=>sub_out ) ;END ARCHITECTURE fhd1 ;(2)8位减法器:f_suber sub_in x ysub_out4f_subersub_in x ysub_out5f_subersub_in x ysub_out6f_subersub_in x ysub_out7sub_out e f gu4u5u6u7LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY 8f_suber ISPORT ( 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 ;sub_out : OUT STD_LOGIC ;diffr0,diffr1,diffr2,diffr3 : OUT STD_LOGIC ;diffr4,diffr5,diffr6,diffr7 : OUT STD_LOGIC ) ;END ENTITY 8f_suber ;ARCHITECTURE 8fhd1 OF 8f_suber ISCOMPONENT f_suber ISPORT ( x,y,sub_in : IN STD_LOGIC ;sub_out ,diffr : OUT STD_LOGIC ) ;END COMPONENT f_suber ;SIGNAL a,b,c,d,e,f,g : STD_LOGIC ;BEGINu0 : f_suber PORT MAP ( x=>x0, y=>y0, sub_in=>, sub_out=>a, diff=>diff0 ) ;u1 : f_suber PORT MAP ( x=>x1, y=>y1, sub_in=>a, sub_out=>b, diff=>diff1 ) ;u2 : f_suber PORT MAP (x=>x2, y=>y2, sub_in=>b, sub_out=>c, 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 ) ;u5 : f_suber PORT MAP (x=>x5, y=>y5, sub_in=>e, sub_out=>f, diff=>diff5 ) ;u6 : f_suber PORT MAP (x=>x6, y=>y6, sub_in=>f, sub_out=>g, diff=>diff6 ) ;u7 : f_suber PORT MAP (x=>x7, y=>y7, sub_in=>g, sub_out=> sub_out, diff=>diff7 ) ;END ARCHITECTURE 8fhd1 ;3-5 程序:或非门逻辑描述:LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY nor ISPORT ( d, e : IN STD_LOGIC ;f : OUT STD_LOGIC ) ;END ENTITY nor ;ARCHITECTURE one OF nor ISBEGINf <= NOT ( d OR e ) ;END ARCHITECTURE one ;时序电路描述:LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY circuit ISPORT ( CL, CLK0 : IN STD_LOGIC ;OUT1 : OUT STD_LOGIC ) ;END ENTITY circuit ;ARCHITECTURE one OF circuit ISCOMPONENT DFF1 ISPORT ( CLK : IN STD_LOGIC ;D : IN STD_LOGIC ;Q : OUT STD_LOGIC ) ;END COMPONENT DFF1 ;COMPONENT nor ISPORT ( d, e : IN STD_LOGIC ;f : OUT STD_LOGIC ) ;END COMPONENT nor ;COMPONENT not ISPORT ( g : IN STD_LOGIC ;h : OUT STD_LOGIC ) ;END COMPONENT not ;SIGNAL a, b : STD_LOGIC ;BEGINu0 : nor PORT MAP ( d=>b, e=>CL, f=>a ) ;u1 : DFF1 PORT MAP ( CLK=>CLK0, D=>a, Q=>b ) ;u2 : not PORT MAP ( g=>b, h=>OUT1 ) ;END ARCHITECTURE one ;3-6 LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY MX3256 ISPORT( INA,INB,INCK,INC: IN STD_LOGIC ;E,OUT1: OUT STD_LOGIC) ;END ENTITY MX3256;ARCHITECTURE one OF MX3256 ISCOMPONENT LK35 ISPORT ( A1,A2,CLK: IN STD_LOGIC ;O1,O2: OUT STD_LOGIC) ;END COMPONENT LK35;BEGIN3-7LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;USE IEEE.STD_LOGIC_unsigned.ALL ;ENTITY CNT ISPORT( CLK,EN,RST,opcode: IN STD_LOGIC ;CQ: OUT STD_LOGIC_VECTOR(15 DOWNTO 0) ;COUT: OUT STD_LOGIC) ;END ENTITY CNT;ARCHITECTURE behav1 OF CNT ISBEGINPROCESS( RST,EN,CLK,opcode )VARIABLE CQI: STD_LOGIC_VECTOR( 15 DOWNTO 0) ;beginIF RST=‟1‟ THEN CQI:=( OTHERS=>‟0‟) ;ELSIF EN=‟1‟ THENIF CLK‟EVENT AND CLK=‟1‟ THENCASE opcode ISWHEN …0‟ =>CQI:=CQI+1;WHEN …1‟ =>CQI:=CQI-1;WHEN OTHERS =>NULL;END CASE;END IF;END IF;CASE opcode ISWHEN …0‟ => IF CQI=65535 THEN COUT<=‟1‟;ELSE COUT<=‟0‟;END IF;WHEN …1‟ => IF CQI=0 THEN COUT<=‟1‟;ELSE COUT<=‟0‟;END IF;WHEN OTHERS =>NULL;END CASE;CQ<=CQI;END PROCESS;END behav1;3-83-93-103-113-123-133-14程序1:SIGNAL A,EN : STD_LOGIC ;PROCESS ( A, EN )VARIABLE B : STD_LOGIC ;BEGINIF EN = …1‟THEN B := A ;END IF ;END PROCESS ;程序2:ARCHITECTURE one OF sample ISBEGINPROCESS ( )VARIABLE a,b,c : integer range…;BEGINc := a+b ;END PROCESS;END ARCHITECTURE one ;程序3:LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY mux21 ISPORT ( a,b : IN STD_LOGIC ;sel : IN STD_LOGIC ;c : OUT STD_LOGIC ) ;END ENTITY mux21 ;ARCHITECTURE one OF mux21 ISBEGINPROCESS ( )BEGINIF sel = …0‟THEN c<=a ;ELSE c<=b ;END IF ;END PROCESS;END ARCHITECTURE one ;第4章Quartus II使用方法习题4-1第5章VHDL状态机习题5-1 例5-4(两个进程):LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY MOORE1 ISPORT ( DATAIN : IN STD_LOGIC_VECTOR ( 1 DOWNTO 0 ) ;CLK,RST : IN STD_LOGIC ;Q : OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 ) ) ;END ENTITY MOORE1 ;ARCHITECTURE behav OF MOORE1 ISTYPE ST_TYPE IS ( ST0,ST1,ST2,ST3,ST4 ) ;SIGNAL C_ST ,N_ST : ST_TYPE ;BEGINREG : PROCESS ( RST ,CLK )BEGINIF RST=‟1‟THEN C_ST<=ST0; Q<=”0000”;ELSIF CLK ‟EVENT AND CLK=‟1‟THENC_ST<=N_ST ;END IF ;END PROCESS ;COM : PROCESS (C_ST , DATAIN)BEGINCASE C_ST ISWHEN ST0 =>IF DATAIN = “10”THEN N_ST <= ST1 ;ELSE N_ST <= ST0 ;END IF ;Q <=”1001” ;WHEN ST1 =>IF DATAIN = “11”THEN N_ST <= ST2 ;ELSE N_ST <= ST1 ;END IF ;Q <=” 0101” ;WHEN ST2 =>IF DATAIN = “01”THEN N_ST <= ST3 ;ELSE N_ST <= ST0 ;END IF ;Q <=” 1100” ;WHEN ST3 =>IF DATAIN = “00”THEN N_ST <= ST4 ;ELSE N_ST <= ST2 ;END IF ;Q <=” 0010” ;WHEN ST4 =>IF DATAIN = “11”THEN N_ST <= ST0 ;ELSE N_ST <= ST3 ;END IF ;Q <=” 1001” ;WHEN OTHERS => N_ST <= ST0 ;END CASE ;END PROCESS ;END ARCHITECTURE behav ;5-2 例5-5(单进程):LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL ;ENTITY MEALY1 ISPORT ( CLK, DATAIN ,RESET : IN STD_LOGIC ;Q : OUT STD_LOGIC_VECTOR ( 4 DOWNTO 0 ) ) ;END ENTITY MEALY1 ;ARCHITECTURE behav OF MEALY1 ISTYPE states IS ( st0,st1,st2,st3,st4 ) ;SIGNAL STX : states ;BEGINPROCESS ( CLK, RESET )BEGINIF RESET = …1‟THEN STX<= st0 ;ELSIF CLK‟ EVENT AND CLK = …1‟THENCASE STX ISWHEN st0 =>IF DATAIN = …1‟THEN STX<= st1; Q<=”10000” ;ELSE Q<=”01010” ;END IF ;WHEN st1 =>IF DATAIN = …0‟THEN STX<= st2; Q<=”10111” ;ELSE Q<=” 10100” ;END IF ;WHEN st2 =>IF DATAIN = …1‟THEN STX<= st3; Q<=”10101” ;ELSE Q<=” 10011” ;END IF ;WHEN st3 =>IF DATAIN = …0‟THEN STX<= st4; Q<=”11011” ;ELSE Q<=” 01001” ;END IF ;WHEN st4 =>IF DATAIN = …1‟THEN STX<= st0; Q<=”11101” ;ELSE Q<=” 01101” ;END IF ;WHEN OTHERS => STX<=st0; Q<=”00000” ;END CASE ;END PROCESS ;END ARCHITECTURE behav ;5-3 序列检测器:要求1:要求2:要求3:5-45-5第6章16位CISC CPU设计习题6-16-26-36-46-56-66-76-8第7章VHDL语句习题7-17-27-37-4 因为每条并行赋值语句在结构体中是同时执行的,所以每条并行赋值语句都相当于一条缩写的进程语句,这条语句的所有输入信号都被隐性地列入此缩写进程的敏感信号表中。
EDA 第六章习题答案
P6.1library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity chp6_1 isport(clk:in std_logic;d_out:out std_logic_vector(5 downto 0)); end;architecture bhv of chp6_1 issignal count: std_logic_vector(5 downto 0); signal temp: std_logic_vector(5 downto 0); beginprocess(clk)beginif clk'event and clk='1' thencount<= count+1;if count="100000" then count<="000000";end if;end if;end process;process(clk)beginif clk'event and clk='0' thentemp<=temp+1;if temp="0111111" then temp<="000000"; end if;end if;end process;d_out<=count+temp;end;P6.2library ieee;use ieee.std_logic_1164.all;entity chap6_2 isport(clk,rst, d: in std_logic;q:out std_logic);end;architecture bhv of chap6_2 issignal a,b,c: std_logic;beginprocess(clk,rst)beginif rst='1' then q<='0';elsif clk='1' and clk'event thena<=d; b<=a; c<=b; q<=c;end if;end process;end;P6.3solution1library ieee;use ieee.std_logic_1164.all;entity chp6_3 isport(x:in std_Logic_vector(7 downto 1);y:out std_logic_vector(2 downto 0)); end;architecture bhv of chp6_3 isbeginprocess(x)beginif x(7)='1' then y<="111";elsif x(6)='1' then y<="110";elsif x(5)='1' then y<="101";elsif x(4)='1' then y<="100";elsif x(3)='1' then y<="011";elsif x(2)='1' then y<="010";elsif x(1)='1' then y<="001";else y<="000";end if;end process;end;solution2library ieee;use ieee.std_logic_1164.all;entity chp6_3_2 isgeneric(n:integer:=3);port(x:in std_logic_vector(2**n-1 downto 0);y:out integer range 0 to 2**n-1); end;architecture bhv of chp6_3_2 isbeginprocess(x)variable temp:integer range 0 to 2**n-1; beginfor i in x'range loopif x(i)='1' thentemp:=i;exit;end if;end loop;y<=temp;end process;end;P6.4library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity chap6_4 isgeneric (n:integer :=5);port(clk : in std_logic;rst : in std_logic;clkout :out std_logic);end ;architecture rtl of chap6_4 issignal clk_p : std_logic;signal clk_n : std_logic;signal cnt_p : integer range 0 to n;signal cnt_n : integer range 0 to n;beginprocess(clk_p, clk_n)beginif((n mod 2) = 0)thenclkout <= clk_p;elseclkout <= clk_p or clk_n;end if;end process;process(clk, rst)beginif(rst = '0') thencnt_p <= 0;elsif(clk'event and clk = '1') thenif(cnt_p = n-1) thencnt_p <= 0;elsecnt_p <= cnt_p + 1;end if;end if;end process;process(clk, rst)beginif(rst = '0') thenclk_p <= '0';elsif(clk'event and clk = '1')thenif (cnt_p < (n/2)) thenclk_p <= '1';elseclk_p <= '0';end if ;end if;end process;process(clk, rst)beginif(rst = '0') thencnt_n <= 0;elsif(clk'event and clk = '0')thenif(cnt_n = n-1) thencnt_n <= 0;elsecnt_n <= cnt_n + 1;end if;end if;end process;process(clk, rst)beginif(rst = '0') thenclk_n <= '0';elsif(clk'event and clk = '0')thenif (cnt_n < (n/2)) thenclk_n <= '1';elseclk_n <= '0';end if ;end if;end process;end rtl;P6.6library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity chp6_6 isport(clk,start,stop,reset:in std_logic;dig1,dig2,dig3:out std_logic_vector(3 downto 0)); end;architecture bhv of chp6_6 issignal sec1:integer range 0 to 10;signal sec2:integer range 0 to 6;signal min:integer range 0 to 10;beginprocess(clk,start, stop,reset)variable count1:integer range 0 to 10;variable count2:integer range 0 to 6;variable count3:integer range 0 to 10;beginif reset='1' thencount1:=0;count2:=0;count3:=0;elsif clk'event and clk='1' thenif start='1' and stop='0' thencount1:=count1+1;if count1=10 thencount1:=0;count2:=count2+1;if count2=6 thencount2:=0;count3:=count3+1;if count3=10 thencount3:=0;end if;end if;end if;end if;end if;sec1<=count1;sec2<=count2;min<=count3;end process;dig1<=conv_std_logic_vector(sec1,4);dig2<=conv_std_logic_vector(sec2,4);dig3<=conv_std_logic_vector(min,4);end;P6.8use ieee.std_logic_1164.all;entity chp6_8 isgeneric(n:integer:=8);port(input:in std_logic_vector(n-1 downto 0);output:out std_logic);end;architecture bhv of chp6_8 isbeginprocess(input)variable temp:std_logic_vector(n-1 downto 0); begintemp(0):=input(0);for i in 1 to n-1 looptemp(i):=input(i) xor temp(i-1);end loop;output<=temp(n-1);end process;end;P6.9library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity chp6_9 isgeneric(n:integer:=4);port(input:std_logic_vector(n-1 downto 0);output:out integer range 0 to n);end;architecture bhv of chp6_9 isbeginprocess(input)variable temp:integer range 0 to n;begintemp:=0;for i in 0 to n-1 loopif input(i)='1' thentemp:=temp+1;end if;end loop;output<=temp;end process;end;P6.10use ieee.std_logic_1164.all;entity chp6_10 isgeneric(n:integer :=8);port(din:in integer range 0 to n-1;dout:out std_logic_vector(n-1 downto 0)); end;architecture bhv of chp6_10 isbeginprocess(din)beginfor i in 0 to n-1 loopif din=i then dout<=(i=>'1', others=>'0');end if;end loop;end process;end;P6.11library ieee;use ieee.std_logic_1164.all;package my_data_type isconstant m: integer :=8;type vector_array is array (natural range<>) ofstd_logic_vector(m-1 downto 0);end my_data_type;library ieee;use ieee.std_logic_1164.all;use work.my_data_type.all;entity chap6_11 isgeneric (n: integer :=8);port( datain: in vector_array(0 to n-1) ;sel: in integer range 0 to n-1;dataout: out std_logic_vector( m-1 downto 0)); end;architecture bhv of chap6_11 isbeginprocess(datain,sel)begindataout<=datain(sel);end process;end;P6.16use ieee.std_logic_1164.all;entity chp6_16 isgeneric (n:integer:=8);port(a,b:in std_logic_vector(n-1 downto 0);cin:in std_logic;s:out std_logic_vector(n-1 downto 0);cout:out std_logic);end;architecture bhv of chp6_16 issignal carry:std_logic_vector(n downto 0);beginprocess(a,b,cin,carry)begincarry(0)<=cin;for i in 0 to n-1 loops(i)<=a(i) xor b(i) xor carry(i);carry(i+1)<=(a(i) and b(i)) or (a(i) and carry(i)) or (b(i) and carry(i));end loop;cout<=carry(n);end process;end;说明:本次答案均为课上讨论过的,P6.11-P6.15均可参考第五章答案,可以利用对应语句将其放入进程中。
Verilog HDL数字设计与综合(第二版) 第六章课后习题答案
1.一个全减器具有三个一位输入:x,y和z(前面的借位),两个一位输出D(差)和B(借位)。
计算D和B的逻辑等式如下所示:D = x’⋅ y’⋅ z’ + x’⋅ y ⋅ z’ + x ⋅ y’⋅ z’ + x ⋅ y ⋅ zB = x’⋅ y + x’⋅ z + y ⋅ z根据上面的定义写出Verilog描述,包括I/O端口(注意:逻辑等式中的+对应于数据流建模中的逻辑或(| |)操作符)。
编写激励块,在模块中实例引用全减器。
对x,y和z这三个输入的8种组合及其对应的输出进行测试。
x y z B D0 0 0 0 00 0 1 1 10 1 0 1 10 1 1 1 01 0 0 0 11 0 1 0 01 1 0 0 01 1 1 1 1答:代码及测试激励如下:(D 应该= x’⋅y’⋅z + x’⋅ y ⋅z’ + x ⋅y’⋅z’ + x ⋅ y ⋅ z)`timescale 1ns/1nsmodule full_sub(x,y,z,D,B);input x,y,z;output D,B;assign D=((!x)&(!y)&(z))||((!x)&y&(!z))||(x&(!y)&(!z))||(x&y&z);assign B=((!x)&y)||((!x)&z)||(y&z);endmodulemodule test61;reg x,y,z;wire D,B;Verilog HDL数字设计与综合(第二版)58initialbeginx<=0;y<=0;z<=0;#10 x<=0;y<=0;z<=1;#10 x<=0;y<=1;z<=0;#10 x<=0;y<=1;z<=1;#10 x<=1;y<=0;z<=0;#10 x<=1;y<=0;z<=1;#10 x<=1;y<=1;z<=0;#10 x<=1;y<=1;z<=1;#10 $stop;endfull_sub fsubtracter(x,y,z,D,B);initial$monitor($time,"x= %b,y= %b,z= %b,B= %b,D= %b",x,y,z,B,D);endmodule最终输出观测结果:# 0x= 0,y= 0,z= 0,B= 0,D= 0# 10x= 0,y= 0,z= 1,B= 1,D= 1# 20x= 0,y= 1,z= 0,B= 1,D= 1# 30x= 0,y= 1,z= 1,B= 1,D= 0# 40x= 1,y= 0,z= 0,B= 0,D= 1# 50x= 1,y= 0,z= 1,B= 0,D= 0# 60x= 1,y= 1,z= 0,B= 0,D= 0# 70x= 1,y= 1,z= 1,B= 1,D= 1第6章数据流建模592.大小比较器的功能是比较两个数之间的关系:大于、小于或等于。
EDA课后习题答案
定义为Net型的变量常被综合为硬件电路中的物理连接,其特点是输出的值 紧跟输入值的变化而变化,因此常被用来表示以assign关键词引导的组合电路描 述。
形成结构,即用SRAM来构成逻辑函数发生器。一个N输入LUT可以实现N个
输1-入8 变就量逻的辑任宏何单逻元辑而功言能,,G如ALN中输的入O“LM与C”、、CNP输LD入中“的异LC或、”F等PG。A中的LUT和
LE的含义和结构特点是什么?它们都有何异同点?
答:输出逻辑宏单元(Output Logic Macro Cell,OLMC),此结构使得
综合器就是能够将一种设计表述形式自动向另一种设计表述形式转换的 计算机程序,或协助进行手工转换的程序。它可以将高层次的表述转化为低 层次的表述,可以将行为域转化为结构域,可以将高一级抽象的电路描述 (如算法级)转化为低一级的电路描述(如门级),并可以用某种特定的 “技术”(如CMOS)实现。
精选ppt课件
1-10 标志FPGA/CPLD逻辑资源的逻辑宏单元包含哪些结构? 答: CPLD( MAX7000S)系列中的 逻辑宏单元由3个功能块组成:逻辑阵列、 乘积项选择矩阵和可编程寄存器,它们可以被单独地配置为时序逻辑和组合逻 辑工作方式。其中逻辑阵列实现组合逻辑,可以给每个逻辑宏单元提供5个乘 积项。“乘积项选择矩阵”分配这些乘积项作为到“或门”和“异或门”的主 要逻辑输入,以实现组合逻辑函数;或者把这些乘积项作为宏单元中寄存器的 辅助输入:清零(Clear)、置位(Preset)、时钟(Clock)和时钟使能控制 (Clock Enable)。 FPGA(Cyclone III)器件的可编程资源主要来自逻辑阵列块LAB,而每个LAB都 由多个逻辑宏单元(Logic Element,LE)构成。LE是Cyclone III FPGA器件 的最基本的可编程单元,LE主要由一个4输入的查找表LUT、进位链逻辑、寄 存器链逻辑和一个可编程的寄存器构成。
《EDA技术实用教程》部分习题解答
《EDA技术实用教程》部分习题解答一、基本概念1—1 EDA技术与ASIC设计和FPGA开发有什么关系?P3~4答:利用EDA技术进行电子系统设计的最后目标是完成专用集成电路ASIC的设计和实现;FPGA和CPLD 是实现这一途径的主流器件。
FPGA和CPLD通常也被称为可编程专用IC,或可编程ASIC。
FPGA和CPLD的应用是EDA技术有机融合软硬件电子设计技术、SoC(片上系统)和ASIC设计,以及对自动设计与自动实现最典型的诠释。
1—2与软件描述语言相比,VHDL有什么特点? P6答:编译器将软件程序翻译成基于某种特定CPU的机器代码,这种代码仅限于这种CPU而不能移植,并且机器代码不代表硬件结构,更不能改变CPU的硬件结构,只能被动地为其特定的硬件电路结构所利用。
综合器将VHDL程序转化的目标是底层的电路结构网表文件,这种满足VHDL设计程序功能描述的电路结构,不依赖于任何特定硬件环境;具有相对独立性.综合器在将VHDL(硬件描述语言)表达的电路功能转化成具体的电路结构网表过程中,具有明显的能动性和创造性,它不是机械的一一对应式的“翻译",而是根据设计库、工艺库以及预先设置的各类约束条件,选择最优的方式完成电路结构的设计。
l-3什么是综合?有哪些类型?综合在电子设计自动化中的地位是什么? P5什么是综合? 答:在电子设计领域中综合的概念可以表示为:将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。
有哪些类型?答:(1)从自然语言转换到VHDL语言算法表示,即自然语言综合。
(2)从算法表示转换到寄存器传输级(RegisterTransport Level,RTL),即从行为域到结构域的综合,即行为综合。
(3)从RTL级表示转换到逻辑门(包括触发器)的表示,即逻辑综合.(4)从逻辑门表示转换到版图表示(ASIC设计),或转换到FPGA的配置网表文件,可称为版图综合或结构综合。
EDA技术与VHDL基础课后习题答案
《EDA技术与VHDL基础》课后习题答案第一章EDA技术概述一、填空题一、电子设计自动化二、超级高速集成芯片硬件描述语言3、CAD、CAE、EDA4、原理图输入、状态图输入、文本输入五、VHDL、Verilog HDL六、硬件特性二、选择题一、A二、C3、A4、D五、C六、D7、A第二章可编程逻辑器件基础一、填空题一、PLD二、Altera公司、Xilinx公司、Lattice公司3、基于反熔丝编程的FPGA4、配置芯片二、选择题一、D二、C3、C4、D第三章VHDL程序初步——程序结构一、填空题一、结构、行为、功能、接口二、库和程序包、实体、结构体、配置3、实体名、类型表、端口表、实体说明部份4、结构体说明语句、功能语句五、端口的大小、实体中子元件的数量、实体的按时特性六、设计库7、元件、函数八、进程PROCESS、进程PROCEDURE九、顺序语句、并行语句二、选择题一、D二、C3、C4、B五、D六、B7、A八、C三、简答题二、LIBRARY IEEE;USE nand_3in ISPORT(a,b,c:IN STD_LOGIC;y:OUT STD_LOGIC); END;ARCHITECTURE bhv OF nand_3in IS BEGINy<=NOT(a AND b AND c);END bhv;五、0000六、(247)第四章VHDL基础一、填空题一、顺序语句、并行语句二、跳出本次循环3、等待、信号发生转变时4、函数、进程五、值类属性、函数类属性、信号类属性、数据类型类属性、数据范围类属性六、程序调试、时序仿真7、子程序、子程序二、选择题一、B二、A3、A4、C五、B六、C7、D三、判定题一、√二、√3、√4、√五、×六、×四、简答题九、修更正确如下所示:LIBRARY IEEE;USE count ISPORT(clk:IN BIT;q:OUT BIT_VECTOR(7 DOWNTO 0));END count;ARCHITECTURE a OF count ISBEGINPROCESS(clk)IF clk'EVENT AND clk='1' THENq<=q+1;END PROCESS;END a;10、修更正确如下所示:…SIGNAL invalue:IN INTEGER RANGE 0 TO 15; SIGNAL outvalue:OUT STD_LOGIC;…CASE invalue ISWHEN 0=>outvalue<='1';WHEN 1=>outvalue<='0';WHEN OTHERS=>NULL;END CASE;…1一、修更正确如下所示:ARCHITECTURE bhv OF com1 ISBEGINSIGNAL a,b,c:STD_LOGIC;pro1:PROCESS(clk)BEGINIF NOT (clk'EVENT AND clk='1') THENx<=a XOR b OR c;END IF;END PROCESS;END;1二、(1) PROCESS(…) --此题中两条IF语句均为信号c进行可能赋值,VHDL语言不许诺IF a=b THENc<=d;END IF;IF a=4 THENc<=d+1;END IF;END PROCESS;(2)ARCHITECTURE behave OF mux IS --同时为q进行多次可能赋值,VHDL语言不许诺BEGINq<=i0 WHEN a='0' AND b='0' ELSE '0'; --WHEN ELSE语句语法错误q<=i1 WHEN a='0' AND b='1' ELSE '0';q<=i2 WHEN a='1' AND b='0' ELSE '0';q<=i3 WHEN a='1' AND b='1' ELSE '0';END behave;13、next1<=1101 WHEN (a='0' AND b='0') ELSEd WHEN a='0' ELSEc WHEN b='1' ELSE1011;1五、(1)、STD_LOGIC_UNSIGNED(2)、GENERIC(3)、IN(4)、width-1(7)(5)、counter_n(6)、“00000000”(7)、clk’EVENT AND clk=’1’(8)、ELSIF(9)、END IF(10)、q<= count1六、修更正确如下所示:LIBRARY IEEE;USE CNT10 ISPORT ( clk: IN STD_LOGIC;q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END CNT10;ARCHITECTURE bhv OF CNT10 ISSIGNAL q1 : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINPROCESS (clk)BEGINIF RISING_EDGE(clk) begin –begin修改成THENIF q1 < 9 THEN --q1为STD_LOGIC数据类型,而9为整型不可直接比较q1 <= q1 + 1; -- q1为STD_LOGIC数据类型,而1为整型不可直接相加ELSEq1 <= (OTHERS => '0');END IF;END IF;END PROCESS;q <= q1;END bhv;17、利用IF语句实现LIBRARY IEEE;USE mux21 ISPORT(ain,bin,sel:IN STD_LOGIC_VECTOR(1 DOWNTO 0);cout:OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END;ARCHITECTURE bhv OF mux21 ISSIGNAL cout_tmp:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGINPROCESS(ain,bin,sel)BEGINIF (sel="00") THEN cout_tmp<=ain OR bin;ELSIF (sel="01") THEN cout_tmp<=ain XOR bin;ELSIF (sel="10") THEN cout_tmp<=ain AND bin;ELSE cout_tmp<=ain NOR bin;END IF;END PROCESS;cout<=cout_tmp;END bhv;第五章QuartusⅡ集成开发软件初步一、填空题1、实体名二、FPGA、CPLD3、.vhd4、输入、综合、适配、仿真、下载五、RTL Viewer、Technology Map Viewer六、功能、参数含义、利用方式、硬件描述语言、模块参数设置7、mif、hex八、根目录二、选择题一、C二、D第七章有限状态机设计一、设计题1、LIBRARY IEEE;USE ztj ISPORT(clk,reset:IN STD_LOGIC;in_a:IN STD_LOGIC_VECTOR(1 DOWNTO 0);out_a:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END;ARCHITECTURE bhv OF ztj ISTYPE state IS(s0,s1,s2,s3); --用列举类型概念状态,简单直观SIGNAL current_state,next_state:state; --概念存储现态和次态的信号BEGINp1:PROCESS(clk) --状态更新进程BEGINIF clk'EVENT AND clk='1' THENIF reset='1' THEN current_state<=s0;ELSE current_state<=next_state;END IF;END IF;END PROCESS;p2:PROCESS(current_state,in_a) --次态产生进程BEGINCASE current_state ISWHEN s0=>IF in_a/=”00” THEN next_state<=s1;ELSE next_state<=s0;END IF;WHEN s1=>IF in_a=/'”01” THEN next_state<=s2;ELSE next_state<=s1;END IF;WHEN s2=>IF in_a=”11” THEN next_state<=s0ELSE next_state<=s3;END IF;WHEN s3=>IF in_a/='11' THEN next_state<=s0;ELSE next_state<=s3;END IF;WHEN OTHERS=>NULL;END CASE;END PROCESS;p3:PROCESS(current_state)BEGINCASE current_state ISWHEN s0=>out_a<='”0101”;WHEN s1=>out_a<=”1000”;WHEN s2=>out_a<=”1100”;WHEN s3=>out_a<=”1101”;WHEN OTHERS=>NULL;END CASE;END PROCESS;END;二、LIBRARY IEEE;USE ztj ISPORT(clk,reset:IN STD_LOGIC;ina:IN STD_LOGIC_VECTOR(2 DOWNTO 0);outa:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END;ARCHITECTURE bhv OF ztj ISTYPE state IS(s0,s1,s2,s3); --用列举类型概念状态,简单直观SIGNAL current_state,next_state:state;BEGINp1:PROCESS(clk) --状态更新进程BEGINIF clk'EVENT AND clk='1' THENIF reset='1' THEN current_state<=s0;ELSE current_state<=next_state;END IF;END IF;END PROCESS;p2:PROCESS(current_state,ina)BEGINCASE current_state ISWHEN s0=> IF ina =”101” THEN outa<=”0010”;ELSIF ina=”111” THEN outa <=”1100”;END IF;IF ina =”000” THEN next_state<=s1;ELSE next_state<=s0;END IF;WHEN s1=> outa<=”1001”;IF ina =”110” THEN next_state<=s2;ELSE next_state<=s1;END IF;WHEN s2=> outa<=”1111”;IF ina =”011” THEN next_state<=s1;ELSIF ina =”100” THEN next_state<=s2;ELSE next_state<=s3;END IF;WHEN s3=> IF ina =”101” THEN outa<=”1101”;ELSIF ina=”011” THEN outa <=”1100”;END IF;IF ina =”010” THEN next_state<=s0;ELSE next_state<=s1;END IF;WHEN OTHERS=>NULL;END CASE;END PROCESS;END;3、LIBRARY IEEE;USE ztj ISPORT(clk,reset:IN STD_LOGIC;ina:IN STD_LOGIC_VECTOR(1 DOWNTO 0);outa:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END;ARCHITECTURE bhv OF ztj ISTYPE state IS(s0,s1,s2,s3); --用列举类型概念状态,简单直观SIGNAL state:istate;BEGINp1:PROCESS(clk)BEGINIF clk'EVENT AND clk='1' THENIF reset='1' THEN state<=s0;result<='0';ELSECASE state ISWHEN s0=>outa<=”0000”;IF ina=”00” THEN state<=s1;ELSE state<=s0;END IF;WHEN s1=> outa <=”0001”;IF ina=”01” THEN state<=s2;ELSE state<=s1;END IF;WHEN s2=> outa <=”1100”;IF ina=”11” THEN state<=s3;ELSE state<=s0;END IF;WHEN s3=> outa <=”1111”;IF ina=”00” THEN state<=s0;ELSE state<=s3;END IF;WHEN OTHERS=>NULL;END CASE;END IF;END IF;END PROCESS;END;第九章VHDL大体逻辑电路设计一、填空题1、输入信号、所处状态二、组合逻辑、时序逻辑3、触发器、14、D触发器、RS触发器、JK触发器、T触发器二、选择题一、A二、C。
EDA技术与Verilog_HDL(潘松)第四章与第六章课后习题答案
Verilog HDL设计初步
习
题
4-1 举例说明,Verilog HDL的操作符中,哪些操作符的运算结果总是一位的。 答: P74/74/80/92
4-2 wire型变量与reg型变量有什么本质区别,它们可用于什么类型语句中? 答:书上P261~262《9.2 Verilog HDL数据类型》 reg主要是用于定义特定类型的变量,即寄存器型(Register)变量(或称寄存器型数据类的 变量)。如果没有在模块中显式地定义信号为网线型变量,Verilog综合器都会将其默认定 义为wire型。过程语句always@引导的顺序语句中规定必须是reg型变量。 wire型变量不允许有多个驱动源
习
题
4-8 给出一个4选1多路选择器的Verilog描述。此器件与图4-1类似,但选通控制端有4 个输入:S0、S1、S2、S3。当且仅当S0=0时:Y=A;S1=0时:Y=B;S2=0时:Y=C; S3=0时:Y=D。
module MUX41a (A,B,C,D,S0,S1,S2,S3,Y); output Y; //定义Y为输出信号 input A, B, C, D; input S0,S1,S2,S3; reg Y; //定义输出端口信号Y为寄存器型变量 always @(A,B,C,S0,S1,S2,S3 )begin //块语句起始 if (S0==0)Y=A; //当S0 ==0成立,即(S0 ==0)=1时,Y=A; else if (S1==0)Y=B; //当(S1 ==1)为真,则Y=B; else if (S2==0)Y=C; //当(S2 ==2)为真,则Y=C; else if (S3==0) Y=D; //当(S3 ==3)为真,即Y=D; end //块语句结束 endmodule
EDA习题答案
EDA习题第一章绪论1、简介EDA/CPLD的开发背景。
1)电子系统的集成化,可使系统体积小、重量轻、功耗低,更重要的是系统的可靠性大大提高;2)数字化及个人电脑的发展促进集成工艺的发展;3)片上系统设计要求依靠计算机;4)产品利润的追求要求缩短产品研发周期。
2、简介EDA采用语言及特点。
硬件描述语言HDL(Hardware Description Language),其中以VHDL为代表。
VHDL:Very High Speed Integrated Circuit HDL超高速集成电路硬件描述语言。
特点:1)与硬件无关;2)设计方法多样:可采用自底向上、自顶向下或混合设计方法;3)具有良好的电路行为描述和系统描述的能力,并在语言易读性和层次化结构化设计方面,表现了强大的生命力和应用潜力。
3、简介SOC的含义。
所谓片上系统设计system on chip,是将电路设计、系统设计、硬件设计、软件设计和体系设计集合于一身的设计。
4、简介EDA技术的含义。
依赖功能强大的计算机,以HDL为手段为系统逻辑描述完成的设计文件,自动地完成逻辑编译、逻辑化简、逻辑分割、逻辑综合、结构综合(布局布线),以及逻辑优化和仿真调试,直至实现既定的电子线路系统功能。
5、简介EDA的发展方向。
1)支持标准化语言的EDA软件不断推出。
2)EDA技术进入无线电、模拟电路等领域。
3)更大规模的FPGA和CPLD器件的不断推出。
第二章 CPLD与FPGA工作原理简介1、简介PLD的含义。
Programmable Logic Device可编程逻辑器件是一种数字集成电路的半成品,在其芯片上按一定排列方式集成了大量的门和触发器等基本逻辑元件,使用者可利用某种开发工具对其进行加工,即按设计要求将片内元件连接起来(编程)2、画出用3*1的PROM实现Y=A+BC。
答案略,参例2-1Y=A+BC逻辑电路。
答案略,参例2-4第三章EDA设计流程及其工具1、简介ASIC的含义。
EDA技术及应用 Verilog HDL版(第三版) 第6章
6.1 8位加法器的设计
1.系统设计思路 加法器是数字系统中的基本逻辑器件,减法器和硬件乘 法器都可由加法器来构成。多位加法器的构成有两种方式: 并行进位和串行进位。 并行进位方式设有进位产生逻辑,运算速度较快;串行 进位方式是将全加器级联构成多位加法器。
并行进位加法器通常比串行级联加法器占用更多的资源。 随着位数的增加,相同位数的并行加法器与串行加法器的资 源占用差距也越来越大。因此,在工程中使用加法器时,要 在速度和容量之间寻找平衡点。
//4位二进制并行加法器adder4b.v module adder4b(a4, b4, c4, s4, co4); input [3:0] a4, b4; input c4; output [3:0] s4; output co4; assign {co4, s4} = a4 + b4 + c4; endmodule
2) 8位二进制加法器的源程序adder8b.v
//8位二进制并行加法器adder8b.v module adder8b(a8, b8, c8, s8, co8); input [7:0] a8, b8; input c8; output [7:0] s8; output co8; wire sc; adder4b u1(.a4(a8[3:0]), .b4(b8[3:0]), .c4(c8), .s4(s8[3:0]), .co4(sc)); adder4b u2(.a4(a8[7:4]), .b4(b8[7:4]), .c4(sc), .s4(s8[7:4]), .co4(co8)); endmodule
图6.2 adder4b的时序仿真结果
图6.3 adder8b的时序仿真结果
4.逻辑综合分析 图6.4是使用Quartus Ⅱ 8.0进行逻辑综合后adder8b的 RTL视图,图6.5是对adder8b的RTL视图中的adder4b进行展 开后的视图。图6.6是使用Quartus Ⅱ 8.0对adder8b进行逻辑 综合后的资源使用情况。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6-15
6-16
设计一个74161的电路。
6-16
注意:异步清零、同步置位
CO= Q3 Q2 Q1 Q0 CTT
6-16
module wytest(reset,load,ctt,ctp,clk,data_in,out,co);//习题6-16 input reset,load,ctt,ctp,clk; input[3:0] data_in; output[3:0] out; output co; reg[3:0] out; reg co; always@(posedge clk or negedge reset) if(!reset) begin out<=4'b0; co<=1'b0; end else if(!load) out<=data_in; else if(!ctt) out<=out; else if(!ctp) out<=out;
else case(in) 3'd0: out=8'b11111110; 3'd1: out=8'b11111101; 3'd2: out=8'b11111011; 3'd3: out=8'b11110111; 3'd4: out=8'b11101111; 3'd5: out=8'b11011111; 3'd6: out=8'b10111111; 3'd7: out=8'b01111111; endcase end
always@(posedge clk) out<=(outa<<8)+(outb<<4)+(outc<< 4)+outd; endmodule
8x8乘法器实现
用另一种方法实现: 将8位数字分成4段,每段两位,那么操作数可表示如下: A=A1X26+A2X24+A3X22+A4 B=B1X26+B2X24+B3X22+B4
6-11仿真波形
8A-原码表示的十进制数-10 B6-原码表示的十进制数-54 80-原码表示的十进制数128 0A----十进制数10 36-----十进制数53
6-12
6-12 编写两个四位二进制数相减的verilog程序
module wytest(opr1,opr2,out_data); //完成Opr1-opr2的运算 input[3:0] opr1,opr2; output[4:0] out_data; reg[3:0] out; reg cout; function[3:0] abs; input[3:0] data; case(data[3]) 1'b0:abs=data; 1'b1:abs=(~data)+1; //对负数求绝对值,按位取反再加1 endcase endfunction
//第三级流水线输出 reg[7:0] third_sum; reg third_cout; //第三级流水线要缓存的数据 //未用的数据缓存 reg[7:0] third_a_31_24; reg[7:0] third_b_31_24; //第一级、第二级流水线计算结果缓存 reg[7:0] first_sum_2;//第一级流水线计算结果第二次缓存; reg[7:0] second_sum_1;//第二级流水线计算结果第一次缓存;
四级流水线实现的32位加法器
8x8乘法器实现
module wytest(out,a,b,clk); input[7:0] a,b; input clk; output[15:0] out; reg[15:0] out; reg[3:0] firsta,firstb; reg[3:0] seconda,secondb; wire[7:0] outa,outb,outc,outd;
6-12
always@(opr1 or opr2) case({opr1[3],opr2[3]}) 2'b00:{cout,out}=opr1-opr2; 2„b01:{cout,out}=opr1+abs(opr2);
//两个正数相减 //正数减负数,化为加 法运算 2„b10:{cout,out}=-(abs(opr1)+opr2); //负数减正数,化为加 法再取反 2„b11:{cout,out}=abs(opr2)-abs(opr1); //负数相减,化为绝 对值相减(顺序调换) endcase
6-13
6-14
试编写一个实现3输入与非门的verilog程序;
module
wytest(a,o); a;
input[2:0] output
o; nand nand3(o,a[0],a[1],a[2]); endmodule
6-14
6-15
6-15 设计74138译码器电路
模为9的占空比50%的奇数分频
四级流水线实现的32位加法器
//第一级流水线 always@(posedge clk) begin {first_cout,fist_sum}<=a[7:0]+b[7:0]+cout; first_a_31_24<=a[31:24]; first_b_31_24<=b[31:24];
first_a_23_16<=a[23:16]; first_b_23_16<=b[23:16]; first_a_15_8<=a[15:8]; first_b_15_8<=b[15:8]; end //第二级流水线 always@(posedge clk) begin {second_cout,second_sum}<=first_a_15_8+first_b_15_8+first_cout; second_a_31_24<=first_a_31_24; second_b_31_24<=first_b_31_24; second_a_23_16<=first_a_23_16; second_b_23_16<=first_b_23_16; first_sum_1<=fist_sum; end
assign out_data={cout,out}; endmodule
6-12
6-12 仿真波形
6-13
6-13 有一个比较电路,当输入的一位BCD码 大于4时,输出1,否则输出0。 module wytest(bcd_in,out); input[3:0] bcd_in; output out; assign out=(bcd_in>4)?1:0; endmodule
四级流水线实现的32位加法器
//第二级流水线的输出 reg[7:0] second_sum; reg second_cout; //第二级流水线要缓存的数据 //未用的数据缓存 reg[7:0] second_a_31_24,second_a_23_16; reg[7:0] second_b_31_24,second_b_23_16; //第一级流水线计算结果缓存 reg[7:0] first_sum_1;//第一级流水线计算结果第一次缓存
else begin out<=out+1; if(out==14) co<=1; else co<=0; end endmodule
6-16
四级流水线实现的32位加法器
module wytest(clk,a,b,sum,cout);
input[31:0] a,b; input clk; output[31:0] sum; output cout; //最后输出的结果 reg[31:0] sum; reg cout; //第一级流水线的输出 reg[7:0] fist_sum; reg first_cout; //第一级流水线要缓存的数据 //未用的数据缓存 reg[7:0] first_a_31_24,first_a_23_16,first_a_15_8; reg[7:0] first_b_31_24,first_b_23_16,first_b_15_8;
6-11
6-11 试编写求补码的Verilog程序,输入是带符号的8位二进 制数
module wytest(data_in,data_out); input[7:0] data_in; output[7:0] data_out; reg[7:0] data_out; //习题6-11
always@(data_in) begin if(data_in[7]) //正数负数判断,从最高是否为1来判断 data_out=((~data_in)+1)|8'h80; else data_out=data_in; end endmodule
四级流水线实现的32位加法器
//第三级流水线 always@(posedge clk) begin {third_cout,third_sum}<=second_a_23_16+second_b_23_16+second_cout; third_a_31_24<=second_a_31_24; third_b_31_24<=second_b_31_24; first_sum_2<=first_sum_1; second_sum_1<=second_sum; end
always@(posedge clk) begin firsta[3:0]<=a[7:4]; seconda[3:0]<=a[3:0]; firstb[3:0]<=b[7:4]; secondb[3:0]<=b[3:0]; end