习题
2-1 举例说明,Verilog HDL的操作符中,哪些操作符的运算结果总是一位的?
2-2 wire型变量与reg型变量有什么本质区别?它们可用于什么类型语句中?
2-3 阻塞赋值和非阻塞赋值有何区别?
2-4 用Verilog设计一个3-8译码器,要求分别用case语句和if_else语句。比较这两种方式。
2-5 图2-13所示为由双2选1多路选择器构成的电路MUXK。对于其中MUX21A,当s=0和s=1时,分别有y=a和y=b。试在一个模块结构中用两个过程来表达此电路。
图2-13 含2选1多路选择器的模块
2-6 给出一个4选1多路选择器的Verilog描述。选通控制端有4个输入:S0、S1、S2、S3。当且仅当S0=0时,Y=A;S1=0时,Y=B;S2=0时,Y=C;S3=0时,Y=D。
2-7 给出全减器的Verilog描述。要求:
(1)首先设计半减器,然后用例化语句将它们连接起来。图2-14中h_suber是半减器,diff是输出差,s_out是借位输出,sub_in是借位输入。根据图2-14设计全减器。
(2)以全减器为基本硬件,构成串行借位的8位减法器,要求用例化语句来完成此项设计。
图2-14 全减器模块图
2-8 设计一个比较电路,当输入的8421BCD码大于5时输出1,否则输出0。
2-9 利用if语句设计一个全加器。
2-10 设计一个求补码的程序,输入数据是一个有符号的8位二进制数。
2-11 设计一个格雷码至二进制数的转换器。
2-12 利用if语句设计一个3位二进制数A[2:0]、B[2:0]的比较器电路。对于比较(A<B)、(A>B)、(A= =B)、(A===B)的结果分别给出输出信号LT=1、GT=1、EQ=1、AEQ=1。
2-13 利用8个全加器,可以构成一个8位加法器。利用循环语句来实现这项设计。并以此项设计为例,使用parameter参数传递的功能,设计一个32位加法器。
2-14 参考2.3.3节,设计一个两位BCD码减法器。注意可以利用BCD码加法器来实现。因为减去一个二进制数,等于加上这个数的补码。只是需要注意,作为十进制数的BCD码的补码获得方式与普通二进制数稍有不同。我们知道二进制数的补码是这个数的取反加1。假设有一个四位二进制数是0011,其取补实际上是用1111减去0011,再加上1。相类似地,以四位二进制数表达的BCD码的取补则是用9(1001)减去这个数再加上1。
2-15 设计一个4位乘法器,为此首先设计一个加法器,用例化语句调用这个加法器,用移位相加的方式完成乘法。并以此项设计为基础,使用parameter参数传递的功能,设计一个16位乘法器。
2-16 用不同循环语句分别设计一个逻辑电路模块,用以统计一8位二进制数中含1的数量。
2-17 用循环语句设计一个7人投票表决器。
2-18 设计一个4位四输入最大数值检测电路。
2-19 利用case语句设计一个加、减、乘、除四功能算术逻辑单元ALU。输入的两个操作数都是四位二进制数;输入的操作码是两位二进制数;输出结果是八位二进制数。为了便于记忆和调试,建议把操作码用parameter定义为参数。
2-20 分别使用UDP和连续赋值语句assign,设计一个八位奇偶校验电路。此电路的功能是,当输入的8位二进制数中含有偶数个1时,输出1;否则输出0。
2-21 设计Verilog程序,实现两个8位二进制数相加,然后将和左移和右移4位,并分别将移位后的值存入reg变量A和B中。