预览加载中,请您耐心等待几秒...
1/3
2/3
3/3

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第十章例题 moduleadd_4(X,Y,sum,C); input[3:0]X,Y; output[3:0]sum; outputC; assign{C,Sum}=X+Y; endmodule //而16位加法器只需要扩大位数即可,见下例: moduleadd_16(X,Y,sum,C); input[15:0]X,Y; output[15:0]sum; outputC; assign{C,Sum}=X+Y; endmodule 快速乘法器常采用网格形式的迭带阵列结构,图10.3示出两个四位二进制数相乘的结构图, //用VerilogHDL来描述乘法器是相当容易的,只需要把运算表达式写出就可以了,见下例。 modulemult_4(X,Y,Product); input[3:0]X,Y; output[7:0]Product; assignProduct=X*Y; endmodule //而8位乘法器只需要扩大位数即可,见下例: modulemult_8(X,Y,Product); input[7:0]X,Y; output[15:0]Product; assignProduct=X*Y; endmodule //下面就是一个位数可以由用户定义的比较电路模块: modulecompare_n(X,Y,XGY,XSY,XEY); input[width-1:0]X,Y; outputXGY,XSY,XEY; regXGY,XSY,XEY; parameterwidth=8; always@(XorY)//每当X或Y变化时 begin if(X==Y) XEY=1;//设置X等于Y的信号为1 elseXEY=0; if(X>Y) XGY=1;//设置X大于Y的信号为1 elseXGY=0; if(X<Y) XSY=1;//设置X小于Y的信号为1 elseXSY=0; end endmodule //下面就是带使能控制信号(nCS)的数据位宽可以由用户定义的(8位)八路数据通道选择器模块: moduleMux_8(addr,in1,in2,in3,in4,in5,in6,in7,in8,Mout,nCS); input[2:0]addr; input[width-1:0]in1,in2,in3,in4,in5,in6,in7,in8; inputnCS; output[width-1:0]Mout; parameterwidth=8; always@(addrorin1orin2orin3orin4orin5orin6orin7orin8ornCS) begin if(!nCS)//nCS低电平使多路选择器工作 case(addr) 3’b000:Mout=in1; 3’b001:Mout=in2; 3’b010:Mout=in3; 3’b011:Mout=in4; 3’b100:Mout=in5; 3’b101:Mout=in6; 3’b110:Mout=in7; 3’b111:Mout=in8; endcase else//nCS高电平关闭多路选择器 Mout=0; end endmodule //下面就是一个简单的与总线有接口的模块是如何对总线进行操作的例子: moduleSampleOfBus(DataBus,link_bus,write); inout[11:0]DataBus;//12位宽的总线双向端口 inputlink_bus;//向总线输出数据的控制电平 reg[11:0]outsigs;//模块内12位的宽数据寄存器 reg[13:0]insigs;//模块内14位宽的数据寄存器 assignDataBus=(link_bus)?outsigs:12‘hzzz; //当link_bus为高电平时通过总线把储存在outsigs的计算结果输出 always@(posedgewrite)//每当write信号上跳沿时 begin//接收总线上数据并乘以三 insigs<=DataBus*3;//把计算结果存入insigs end endmodule