← 2022 · 海光 笔试

推荐答案 测试一下

关于Verilog HDL中的数字,请找出以下数字中最大的一个( )。

A、B'b1111_1110 B、3'o276 C、3'd170 D、2'h3E
单选题 中等 笔试真题单选

参考答案

我们逐项分析各个选项,将不同进制的数字转换为十进制进行比较。 A: B'b1111_1110。这是二进制数,位数是9位(因为B后面是b,表示二进制,下划线可忽略)。b1111_1110是8位二进制数,最高位是1,值为 254(十进制)。注意:B'b表示二进制数,第一个B是选项标记,实际是'b1111_1110。 B: 3'o276。这是八进制数,3表示位宽?这里要注意:在Verilog中,数字格式为 <位宽>'<进制><数字>。3'o276 表示3位八进制数?但八进制数每位的范围0-7,而276是三位数字,但位宽是3?实际上,位宽指定的是二进制位数,不是进制位数。3'o276 表示用3位二进制数表示八进制数276,但276八进制转换为二进制是 010 111 110,需要9位,3位不够,会发生截断。但在比较时,通常先转换为实际数值,忽略位宽?题目没有说明位宽是否参与比较。通常,Verilog中数字的字面量在不指定位宽时,默认为32位。但这里明确写了位宽。对于比较大小,应该考虑实际数值,位宽只影响存储时的截断。正确的做法是:3'o276 表示一个3位二进制数的值,但八进制276超出3位二进制范围,所以会截断。但题目考察的是数字的大小,可能期望我们忽略位宽,只比较数值大小?或者需要理解Verilog数字格式的表示。通常,在笔试中,这种题是让将不同进制的数字转换为十进制比较。选项B:3'o276,位宽3,进制o(八进制),数字276八进制。但位宽3表示二进制3位,最大能表示7,而276八进制(十进制为 2*64+7*8+6=128+56+6=190)显然超出了3位二进制范围,所以实际上这个数字会被截断为最低3位二进制,即 'b110 = 6。所以实际数值是6?还是按完整数值?在Verilog中,如果位宽小于数值所需位数,则高位被截断。所以3'o276的实际值是 276 mod 2^3 = 190 mod 8 = 6? 不对,截断是保留低位二进制位,八进制276对应二进制 'b010_111_110,低3位是110,即6。所以实际数值是6。但通常笔试中,这种题往往不考虑位宽截断,而是按字面数值转换。因为题目说“数字”,可能是指字面量本身的值。我们需要根据常见IC笔试习惯:通常比较的是数字的大小,不考虑位宽截断,因为位宽是声明,但数值本身由进制和数字串决定。另外,选项C、D也都有位宽。检查所有选项: A: B'b1111_1110 这种写法有点奇怪,第一个B是选项标记还是位宽?通常写法是 8'b1111_1110,这里写的是 B'b,可能是选项A的标记B,后面是'b,所以实际是 'b1111_1110,无位宽,默认为32位,数值为254。 B: 3'o276,位宽3,数值按八进制276,但位宽3,在Verilog中会截断,但如果我们不考虑截断,数值是190?但3位二进制最大是7,所以通常认为这个写法是无效的,或者写错了。在标准Verilog中,位宽必须能容纳数字,否则编译器会警告但实际使用截断值。笔试中,通常会把数字当成完整的数值,忽视位宽。但是,选项C和D也有位宽,我们需要统一。 C: 3'd170。位宽3,十进制170。3位二进制最大7,170超出范围,截断后为170 mod 8 = 2。所以按截断是2。 D: 2'h3E。位宽2,十六进制3E。2位二进制最大3,3E (62) 超出范围,截断后为62 mod 4 = 2?3E二进制是0011 1110,低2位是10,即2。所以截断后也是2。 如果考虑截断,A是254(无位宽,8位二进制,但没写位宽,默认32位,数值254),B=6,C=2,D=2,最大是A。如果不考虑截断,A=254,B=190,C=170,D=62,最大也是A。所以不管是否截断,A都是最大的。但要注意,选项A的写法“B'b1111_1110”,前面的B可能是选项标记,但题目中的写法是“A、B'b1111_1110”,所以A选项的内容是“B'b1111_1110”,这个B可能不是位宽,而是书写格式?按Verilog标准,允许写<size>'<base><digits>,但这里没有数字位宽,直接'b,表示未指定位宽,数值就是二进制数1111_1110(8位),值为254。所以A正确。 但审查选项B:3'o276,按理说八进制276应该是9位二进制,位宽3无法表示,但数值上190远大于254?不对,190<254,所以A最大。但还要检查选项C和D是否可能有陷阱?比如十六进制2'h3E,h表示十六进制,3E是两位十六进制,即 3*16+14=62,位宽2最大3,所以数值62。选项C: 3'd170,十进制170,位宽3,数值170。所以不考虑截断时,A=254最大,B=190次之,C=170,D=62。所以A最大。 但有没有可能因为位宽导致数值变小?比如,在Verilog中,当位宽与数值不匹配时,数值会被截断,但截断后的值很小。但通常笔试中,这类题是直接比较进制转换后的数值,而不考虑截断,因为截断是运行时行为,而题目的意图是考察进制转换和表示。所以答案应该是A。 为了稳妥,我们可以说:将各选项转换为十进制比较,A为254,B为190,C为170,D为62,故A最大。 注意题目中选项A写的是“B'b

涉及知识点

  • Verilog
← 上一题
登录后反馈错题
下一题 →