- 1.状态机的编码风格包括一段式、两段式和三段式,下列描述正确的是()
- 2.线网中的值被解释为无符号数。在连续赋值语句中,assign addr[3:0]=-3;addr被赋予的值是()
- 3. "a=4'b11001,b=4'bx110" 选出正确的运算结果()
- 4.下列描述代码可综合的是()
- 5. reg[255:0] mem[7:0]正确的赋值是()
- 6.以下关于逻辑综合中解决congestion问题描述不正确的是()
- 7.综合不包括下面哪一个过程()
- 8.下面关于FIFO的描述正确的是()
- 9. Verilog语言中,下列哪些语句不可以被综合()
- 10. 下面表达式中结果位1'b1的是( )
- 11.简述流水线设计的方法和作用。
- 12.怎样用D触发器、与或非组成二分频电路?
- 13.请根据下面的设计描述,尽可能多的列出你所能想到的用于功能验证的测试点
- 14.用D触发器搭建4进制的计数器。
- 15.设计一个同步fifo,读写时钟相同,其中在写入时每100个时钟周期会写10个,具体哪个时刻写入不确定,在读出侧每10个cycle会读1个,计算FIFO的最小深度?
- 16.如下代码在综合时是否可以综合出时钟门控电路?如果能,画出时钟门控示意图,如果不能,请修改使信号out可以综合出时钟门控电路。
- 17.用Verilog语言实现一个带使能的模100异步清0计数器;模块定义为module count (out, count_en, clr, clk);
- 18.画出可以检测11101串的状态转移图,并用Verilog实现FSM;要求每检测到一次该序列,输出2个周期的高电平信号;要求使用低功耗的状态机编码方式;
为了能够在做题目的过程中学习到需要的知识,对每道题知识参考或者知识详情都做了详细的说明。方便后续复习。欢迎对文中的解答批评指正。
题目原文链接数字IC打工人,感谢作者的收集汇总。
1.状态机的编码风格包括一段式、两段式和三段式,下列描述正确的是()- A 一段式寄存器输出,易产生毛刺,不利于时序约束;
- B 二段式组合逻辑输出,不产生毛刺,有利于时序约束;
- C 三段式寄存器输出,不产生毛刺,有利于时序约束;
- D 所有描述风格都是寄存器输出,易产生毛刺,有利于时序约束。
寄存器输出才不产生毛刺。 状态机的分类:所谓几段只是一种建模思路,与几个always块没有关系。一段式指将状态转移、状态输出、输入条件在同一个块中。而二段式中的状态寄存器分割了状态转移条件与状态输出两个组合逻辑块。三段式则以下一状态进行输出,所以状态转移条件与状态输出两个组合逻辑块串联在一起,使得时序路径的组合逻辑较复杂。至于输出形式,则取决于具体应用是否可以接收额外的latency,如果可以则可以使用寄存器输出。
2.线网中的值被解释为无符号数。在连续赋值语句中,assign addr[3:0]=-3;addr被赋予的值是()- A 4’b1101
- B 4’b0011
- C 4’bxx11
- D 4’bzz11
Verilog IEEE Std 1364-2005 5.1.3 Using integer numbers in expressions:整数可以用作表达式中的操作数。整数可以表示为:
- 未定义大小(unsized),未定义基准类型(unbased)的整数,如12
- 未定义大小(unsized),定义基准类型(based)的整数,如’d12,'sd12
- 定义大小(unsized),定义基准类型(based)的整数,如16’d12,16’sd12
没有 base 说明符的整数的负值与有 base 说明符的整数的解释不同。没有 base 说明符的整数应被解释为二进制补码形式的有符号值。带有无符号 base 说明符的整数将被解释为无符号值。
integer IntA
IntA = 4'd-12 / 3 //非法表达
IntA = -12 / 3; // -4。
IntA = -'d12 / 3; // 1431655761。-'d12失去了它作为有符号负数的身份,(2^32 - 12)/3 = 1431655761。
IntA = -'sd12 / 3; // -4。
IntA = -4'sd12 / 3; // -4'sd12 等效于 -(4'sd12) = - (-4) = 4 , 则结果为 4/3 = 1
4.8 Integers, reals, times, and realtimes:实现可能会限制 integer 变量的最大大小,但它至少应该是32位。
-3解释为有符号整数,二进制补码:32’b1111_1111_1111_1111_1111_1111_1111_1101
高位宽给地位宽赋值,截断高位。
4bit下-3的补码为 2^4 - 3 = 15 = 4’b1101
3. “a=4’b11001,b=4’bx110” 选出正确的运算结果()- A a&b=0
- B a&&b=1
- C b&a=x
- D b|a=x
首先,3.5.1 Integer constants 说了如果无符号数的大小小于为常数指定的大小,则无符号数应该用零填充到左侧。如果无符号数的最左边位是x或z,则应分别使用x或z填充到左边。如果无符号数的大小大于为常数指定的大小,则应从左侧截断无符号数。所以4’b11001 = 4’b1001
5.1.10 Bitwise operators
- &、、、^:任一数为x或z,结果为x
- |:任一数为x或z,当另一个数为1,结果为1,否则为0。很好理解1或任何数都为1。
- ~:任一数为x或z,结果为x
A:a&b =4’b1001 & 4’bx110 = 4’bx000 B:a&&b =4’b1001 && 4’bx110 = 1(仿真结果) C:b&a = 4’bx000 C:b|a = 4’bx110 | 4’b1001 = 4’b1111
4.下列描述代码可综合的是()- A fork…join
- B assign/deassign
- C if…else和case
- D repeat和forever
题目比较简单。 以Xilinx IDE Vivado为例分析其他选项的依据。 ug901 assign and deassign Statements 小节说明了不支持assign and deassign。 以Vivado synthesis支持的Verilog结构来学习 Verilog语句可综合性
5. reg[255:0] mem[7:0]正确的赋值是()- A mem[5]==3’d0;
- B mem[10]=8’d1;
- C mem=0;
- D mem[5][3:0]=4’d1;
首先题目语句是定义了8个位宽为256的寄存器组成的数组。 A不能说是错的,只能说不规范。 B超出索引范围。 C一次不能选择数组中的多个元素。 D对的,Verilog-2005 5.2.2 Array and memory addressing原文:要表示数组元素的位选择或部分选择,首先需要为每个维度提供一个地址来选择所需的word。一旦被选中,位选择和部分选择应以与net和reg位选择和部分选择相同的方式进行。
6.以下关于逻辑综合中解决congestion问题描述不正确的是()- A 禁用多引脚标准单元,例如4输入引脚以上的标准单元
- B 使用partial blockage以降低congestion区域的cell density
- C 过多使用MUX单元不利于congestion的优化,因此MUX单元要尽可能禁用
- D 尽可能使用DCG做逻辑综合
不会做
7.综合不包括下面哪一个过程()- A Translation
- B Routing
- C Mapping
- D Logic Optimization
Synopsys综合工具DC处理流程 :synthesis=translation+mapping+optimization
- translation:把设计的HDL描述转化为GTECH库元件组成的逻辑电路;GTECH库是Synopsys公司提供的通用的、独立于工艺的元件库。
- mapping:将GTECH库元件映射到某一特定的半导体工艺库上,此时的电路网表包含了相关的工艺参数。
- optimization:根据设计者设定的时延、面积、线负载模型等综合约束条件对电路网表进一步优化的过程。
布线 Routing 为 Implementation 的步骤。
8.下面关于FIFO的描述正确的是()- A FIFO的读写必须属于同一时钟域
- B FIFO是先进先出的存储器
- C 外部不可以直接操作FIFO的读写地址
- D FIFO的空信号在写时钟域产生,满信号在读时钟域产生
- A generate语句块
- B for语句块
- C function语句块
- D force语句
以Vivado synthesis支持的Verilog结构来学习 Verilog语句可综合性查Verilog结构是否可综合 过程性语句force不可综合。
10. 下面表达式中结果位1’b1的是( )- A 4’b1010 & 4’b1101
- B !4’b1001 || !4’b0000
- C &4’b1101
- D ~4’b1100
Verilog-2005 5.1 Operators
逻辑(Logical)运算符:与(&&)、或(||)、非(!),逻辑比较运算的结果应该是1(定义为真),0(定义为假),或者,如果结果不明确,则未知值(x)。
按位(Bitwise)运算符:与(&)、或(|)、异或(^)、同或/异或非(^~等效~^)。按位操作符将对操作数执行位操作;即运算符需要将一个操作数中的一个位与另一个操作数中对应的位结合起来,计算出1bit的结果。非(~)是按位一元求反运算符。
缩减(Reduction)运算符:与(&)、或(|)、异或(^)。对单个操作数进行按位运算,产生单bit结果。
A:Bitwise运算。4’b1010 & 4’b1101 = 4’b1000 B:Logical运算。!4’b1001 || !4’b0000 = 4’b0110 || 4’b1111 = 1’b1 C:Reduction运算:&4’b1101 = 1’b0 D:Bitwise运算:~4’b1100 = 4’b0011
11.简述流水线设计的方法和作用。流水线使用存储器件将时钟周期内关键路径(最大组合延迟的路径)分割开。这减少了关键路径上各阶段延迟并使电路能以更高频率工作。流水线电路增加了各时钟阶段的计算能力,但是由于使用了存储器单元页增加了负载。 流水线可以增加吞吐率,但是在使用流水线时会引入额外的开销,如时钟偏移和寄存器延迟。这些开销限制了所能达到的加速值。
12.怎样用D触发器、与或非组成二分频电路?D触发器 ~Q 端接到 D 端。
13.请根据下面的设计描述,尽可能多的列出你所能想到的用于功能验证的测试点一个异步FIFO, rdata和wdata均为8位数据,FIFO深度为16,当rst_n输入为低时,FIFO被复位,当wclk的上升沿采样到wr为高时,数据被写入FIFO,当rclk的上升沿采样到rd为高时,FIFO输出数据。此外,当FIFO为空时,empty信号输出为高,当FIFO满时,full信号输出无高。
验证还不会。
14.用D触发器搭建4进制的计数器。两个D触发器级联。
15.设计一个同步fifo,读写时钟相同,其中在写入时每100个时钟周期会写10个,具体哪个时刻写入不确定,在读出侧每10个cycle会读1个,计算FIFO的最小深度?题目应该是默认一个周期写入一个数据。考虑最悲观的情况,前100个时钟的最后10个周期和后100个时钟的前10个周期写入20个数据。 写入的时间为20周期,这个时间可以读两个,fifo中还有18个。 所以fifo最小深度为18。
16.如下代码在综合时是否可以综合出时钟门控电路?如果能,画出时钟门控示意图,如果不能,请修改使信号out可以综合出时钟门控电路。always @(posedge clk or negadge rst_n) begin
if(rst_n==1'b0)
out
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?