- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验2——算数运算电路实验
《专用集成电路设计基础》电路设计实验
实验1——算数运算电路实验
(实用型移位式二进制乘法器电路)
电路功能
设计一个移位式乘法器电路,要求:
采用最简单的方式产生部分积;
采用右移部分积之和的部分积求和累加方式;
需要有独立的乘积寄存器。
电路设计
采用Verilog HDL硬件描述语言进行,用ModelSim EDA软件进行仿真。
实用型移位式乘法器电路描述:
//******************************************************************//
//****** MODULE DESCRIPTION : 16-Bit Practical Shift Multiplier
//****** AUTHOR : rzH
//****** DATE : 06.20.2013
//******************************************************************//
module multiplier_nbit ( rst, clk, x, y, result );
//data width definition
parameter mwidth = 16;
parameter rwidth = mwidth + mwidth;
//
input rst, clk;
//input operation data x and y
input [mwidth-1:0] x, y;
//output multiply result
output [rwidth-1:0] result;
reg [rwidth-1:0] result;
//stcnt: state counter---3 state
//state 0: input data registered
//state 1: multiply operation
//state 2: output data registered
reg [1:0] stcnt;
//mucnt: multiply step counter---16 step
reg [3:0] mucnt;
//multiplicand register
reg [mwidth-1:0] opx;
//partial product register
//also to save resource, multiplier are initially
//stored in the low 16bit of the register
reg [rwidth-1:0] ptpro;
//select data source to multiplicand register
wire tx_sel;
//select data source to partial product register
wire [1:0] tp_sel;
//select data source to ptadd according to
//the lowest bit of the multiplier in multiply process
wire adp_sel;
wire [rwidth-1:0] ptshf1, ptshf0, ptadd;
//partial product initial
wire [rwidth-1:0] ptini;
//temprory
wire [mwidth-1:0] temp_x;
reg [rwidth-1:0] temp_p;
//output multiply result enable
wire mout_en;
//16-bit adder output: summary and carry
wire [mwidth-1:0] sum;
wire co;
//stcnt state 1: start multiply process
assign mucnt_en = (stcnt == 2b01) ? 1b1 : 1b0;
文档评论(0)