本文已参与「新人创作礼」活动,一起开启掘金创作之路
- 代码$display("%h",14'bx0_1010)的输出结果是()?
A. xxxa B. xxXa
C. XXXa D. XXxa
本题答案是B。 部分比特x态为大写X,全部比特x态为小写x
A. 15.5,31 B. 16,32
C. 1.55,3.1 D. 1.6,3.2
本题答案选B,`timescale命令定义了test模块的时间单位是10ns,时间精度是1ns。因为,在test模块中,所有的时间值应为10ns的整数倍,且以1ns为时间精度。这样经过取整操作,存在参数d中的延迟时间实际是16ns,这意味着在仿真时刻为16ns时寄存器set被赋值0;在仿真时刻为32ns时寄存器set被赋值1。
- 关于verilog中操作符描述错误的是()
A. <<的优先级大于<
B. 条件操作符优先于拼接操作符
C. >>>逻辑右移,左边补0
D. 使用“==”比较二值逻辑,如果出现X或者Z,则结果为X
本题答案选C,>>>是算术右移,考虑符号位,如果是0,则左边补0,如果是1,则左边补1。
- 优先级的划分如下,从前到后优先级逐渐降低:
- 算数运算符: ! ~ * / % + -
- 移位运算符: << >>
- 关系运算符: <= < > >=
- 等式运算符: == != === !==
- 缩减运算符: & | ^ ^~
- 逻辑运算符:&& ||,注意不包括逻辑非!
- 条件运算符: ? :
- 拼接运算符: {}
- 观察下面的选项,选出正确的选项。
A. parameter语句能够在延时的格式说明块中出现
B. 由specparam语句进行定义的参数只能是延时参数
C. 由parameter语句定义的延时参数只能在延时说明块内使用
本题答案选B,
- specparam语句只能在延时的格式说明块中出现,而parameter语句则不能够在延时的格式说明块中出现。所以A选项是错误的。
- 由specparam语句定义的延时参数只能在延时说明块内使用,而由parameter语句定义的参数则可以在模块内的任何位置说明。所以C选项是错误的。
- 假设a=3’b101,b=3’b001,下列描述错误的是()
A. ~^a=1’b0
B. a<<2=3’b100
C. (a<b)?1:0=0
D. {3{2’b10}=6’b101010
本题选A,我的选项是C。 我当初脑子也是瓦特了,在想0=0是个啥,A选项是将a按位异或之后再取反,答案应该是1. C选项是?左边不成立,应该是0,所以该选项正确
- 下面交换a与b两个寄存器值,不正确的代码是
- mealy机状态转移路径中 左侧为input,右侧为output
- 检测到特定的序列后输出为1; 状态转移图中只有一个地方输出为1; 从初始态到输出为1的态路径就是检测序列 这一题纯属蒙对了,没太想清楚原因在哪里?
- 下面交换a与b两个寄存器值,不正确的代码是
always @(posedge clk) begin
a = b ;
end
always @(posedge clk) begin
b = a;
end
此时的2 个 always 块中的语句是同时进行的,但是 a=b 与 b=a 是无法判定执行顺序的,这就造成了竞争的局面。但不管哪个先执行(和编译器等有关系),不考虑 timing 问题时,他们执行顺序总有先后,最后 a 与 b 的值总是相等的。没有达到交换 2 个寄存器值的效果。
always @(posedge clk) begin
a <= b ;
end
always @(posedge clk) begin
b <= a;
end
这里面的2 个 always 块中语句并行执行,赋值操作右端操作数使用的是上一个时钟周期的旧值,此时 a<=b 与 b<=a 就可以相互不干扰的执行,达到交换寄存器值的目的。 这种非阻塞赋值并不是马上执行的,而是在“always”块内的下一条语句执行后,b并不等于a,而是保持原来的值,直到“always”块结束后,才进行赋值。
- 锁存器和触发器是构成时序逻辑电路的基本单元,锁存器是对电平敏感,触发器是对边沿敏感。
- 关于同步FIFO设计中,data_in是输入数据,data_out是输出数据,wr_en是写使能,rd_en是读使能,full是写满标志,empty是读空标志,fifo_data_cnt为内部的计数器,Deepth_fifo为FIFO的深度,下列描述错误的是()
A. FIFO 的场景分为几种,Read,Write,No ReadNo Write,BothRead Write,需要考虑所有情况的处理
B. fifo_data_cnt,当复位的时候,为 0,当未读未写的时候,维持不变;
当仅读未写,同时 FIFO 不空的时候,-1;当仅写未读同时 FIFO 不满的时候,+1;当同时读写的时候,维持不变
C. 当读使能的时候,并且 FIFO 不空,那么将读指针地方的数据读出到 data_out,
当写使能的时候,并且 FIFO 不满,那么将 data_in 写指针地方的数据打到 FIFO 内部
D. FIFO 满的逻辑是判断 fifo_data_cnt为0时, 或者读写指针相同。
本题答案选D,当cnt为Deepth_fifo或为(Deepth_fifo-1)但正在写,满标准为1,其他情况为0;
- fifo利用格雷码进行同步的时候,满的条件是 格雷码的前两位不同,后面尾数都相同;如果转为二进制,就是第一位不同,后面位数相同
A. 8'b10000001
B. 8'b11111110
C. 8'b10000010
D. 1
本题答案选A,因为opcode是3'b011 相当于 3'd3 为 bor操作,所以 a 8'b00000001 与 b 8'b10000001相或得8'b10000001
- 因为opcode=bor,所以输出a与b按位或,即8'b10000001