← 2022 · AMD 笔试

推荐答案 测试一下

Which of the following expressions is true?

A. a=4'df B. C=3 'd8 C. B=5 'h1 D. d=3 'b2
单选题 中等 笔试真题单选

参考答案

我们分析题目:四个选项都是Verilog中的数值表示方式。需要判断哪个表达式是正确的。注意Verilog中数值的格式:[位宽]'[基数][数值],基数为b(二进制)、o(八进制)、d(十进制)、h(十六进制)。数值必须符合基数范围。 A. a=4'df - 位宽4,基数d(十进制),数值f?f不是十进制有效数字,十进制只能用0-9。错误。 B. C=3 'd8 - 位宽3,基数d,数值8。3位十进制最大值是999?但这里数值8是合法的,但注意位宽3的十进制数8可以表示,但通常位宽指二进制位宽,3位二进制能表示0-7,十进制8需要4位二进制。但Verilog语法允许这样写吗?实际上,如果数值超出位宽,会截断或报错?语法上是允许的,但数值8对应的二进制1000,需要4位,用3位会截断为000?通常Verilog中,如果数值超出位宽,会取低几位。但题目问的是表达式是否合法(true),即语法正确。语法上,数值部分可以是任何数字,只要符合基数。d8是合法的十进制数8。但是否有空格?选项中是C=3 'd8,中间有空格?实际写Verilog时通常没有空格,但有空格一般也允许?严格来说,Verilog语法中数值格式不允许有空格,即3'd8。这里写成了3 'd8,可能被视为语法错误?但很多工具会忽略空格。不过,为了严谨,通常Verilog中'前后不能有空格。选项A有空格4'df,但主要问题是f不是十进制。选项B有空格,但数字8是十进制合法。选项C:B=5 'h1 - 位宽5,基数h(十六进制),数值1合法。选项D:d=3 'b2 - 位宽3,基数b(二进制),数值2?二进制只能0或1,2非法。所以C是唯一正确的。 但注意B的数值8用3位十进制位宽?实际上位宽是指二进制位数,不是十进制位数。3'd8在语法上是允许的,虽然8需要4位二进制,但Verilog允许赋值时数值超出位宽,只是会截断。但题目问"Which of the following expressions is true?"可能指语法正确且符合规范?通常这类题目考察数值表示法的基本规则:基数与数值必须匹配。所以B中d8合法,但考虑到位宽,B可能正确?但C也是正确的。需要判断哪个是true。可能只有一个正确。A和D明显错误。B和C中,可能有陷阱:B的位宽是3,而十进制8需要4位二进制,但语法上允许,不过有些教材认为这种写法不规范?或者空格问题?实际上,Verilog语法规定数值格式中不允许有空格,即'前后不能有空格。选项B中写成了"3 'd8",中间有一个空格,这是语法错误。而选项C中"5 'h1"也有空格?题目原文是:"B=5 'h1",同样有空格。所有选项都有空格?题目描述:"a=4'df" 没有空格?仔细看:"a=4'df" 没有空格,但" C=3 'd8" 有空格。实际上题目中可能空格是格式问题。通常笔试题目中,这样的写法就是有空格。那么所有选项都有空格?不,A是"4'df"没有空格,B是"3 'd8"有空格,C是"5 'h1"有空格,D是"3 'b2"有空格?题目正文:"D. d=3 'b2"有空格。所以只有A没有空格,但A数值错误。因此,可能全部错误?但我们需要根据一般理解。 另一种常见考点:数值表示时,基数符号'后面不能有空格,但有些工具允许。更常见的陷阱是:基数符号和数字之间不能有空格,但位宽和基数之间可以有空格?实际上,Verilog语法规定:<size>'<base><digits>,其中size、'、base、digits之间不能有空格。所以所有有空格的都是语法错误。但A没有空格,但十进制用了f错误。所以没有正确选项?但单选题,一般会有一个正确。可能空格在题目中是排版问题,实际写代码时没有空格。通常这类题目,考察数值的基数与数字匹配。所以A和D错误,C没问题,B中8在十进制合法但位宽3可能被认为不合理?但位宽在任何基数下都是指二进制位宽,所以3'd8在语法上有效,只是8的二进制1000,截断后为000。但语法没错。然而很多题目认为8超出了3位十进制数的范围?不对,十进制位宽?实际上,Verilog中的位宽指二进制位宽,与数值的十进制表示无关。所以3'd8是合法的,但可能在一些严格的解释中,数值8需要至少4位二进制,但语言允许。所以C和B都合法?但C中十六进制1合法。所以可能有两个正确。但题目是单选,所以必须选一个。可能题目考察的是数值表示中不允许出现空格,所以只有A没有空格,但A错误。因此需要仔细看题目原文的格式。 由于题目是文本,可能空格是故意加的。常见IC笔试中,这类题常选C。因为A中f不是十进制,B中8需要4位,但3位二进制最大是7,所以超出范围,但语法允许?实际上,Verilog中数值超出位宽不会报错,只是截断,所以B在语法上也是正确的。但很多教材中强调数值不能超出表示范围?不,Verilog允许。所以可能考察的是基数匹配:二进制只能0-1,八进制0-7,十进制0-9,十六进制0-9a-f。所以B中8是十进制正确,C中1是十六进制正确。那么两个正确?或者可能B中写的是"3 'd8",中间有空格,但C也有空格。所以可能题目希望我们忽略空格,只看基数匹配。那么B和C都正确?但单选题,必然只有一个正确。另一种可能:注意选项B是"C=3 'd8",C是"B=5 'h1",D是"d=3 'b2",A是"a=4'df"。其中位宽和数值的关系:B的位

涉及知识点

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