Verilog设计求最大公约数系统_第1页
Verilog设计求最大公约数系统_第2页
Verilog设计求最大公约数系统_第3页
Verilog设计求最大公约数系统_第4页
Verilog设计求最大公约数系统_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE1-武汉大学电工电子基础课程教学基地实验报告学院专业2010年6月18日课程名称求最大公因数指导教师曹华伟姓名年级学号成绩一:实验目的1学会控制器模型的设计。2掌握FSM的设计方法。3继续熟悉实验箱的使用方法。二:实验原理1、集成电路的划分 数据单元包含有保存运算数据和运算结果的数据寄存器,还包括组合逻辑电路来完成数据运算。数据单元元产生输出信号,数据运算状态等信息。控制单元要从数据单元得到状态信息,以决定继续进行哪些数据运算,产生控制信号序列,以决定何时进行何种数据运算。求最大公因数模型完成对集成电路系统的划分任务,通过数据路径和控制路径实现求得最大公因数的可直接综合系统。三:实验步骤:定义模块接口定义模块接口如下图:该模块有4个输入operand_A、operand_B,result_taken,input_available以及3个输入idle,result_data和result_rdy。根据此接口定义可以进行数据路径和控制路径路径的实现。基本模块实现(1)定义数据路径数据单元包含有保存运算数据和运算结果的数据寄存器,还包括组合逻辑电路来完成数据运算。数据单元元产生输出信号,数据运算状态等信息。控制单元要从数据单元得到状态信息,以决定继续进行哪些数据运算,产生控制信号序列,以决定何时进行何种数据运算。数据路径是以一定的拓扑关系互连的若干功能部件。而数据路径的设计流程如下图:根据图中所示的数据路径可进行数据路径的定义。实现代码如下:modulegcdDatapath(inputclk,//Datasignalsinput[0:7]operand_bits_A,input[0:7]operand_bits_B,output[0:7]result_bits_data,//Controlsignals(ctrl->dpath)inputA_en,inputB_en,input[0:1]A_mux_sel,inputB_mux_sel,//Controlsignals(dpath->ctrl)outputB_zero,outputA_lt_B);(2)定义控制路径行为综合器总是用有限状态机作为控制器,而且一般采用硬连线方式,也就是说用随机组合逻辑电路计算下一状态,当前状态以一定方式编码后由寄存器锁存。硬连线方式有限状态机不仅有完善的数学模型,更重要的是这种电路的综合技术已有非常充分的研究,因此寄存器传输级综合能够得到很好的结果。在行为级描述中,各个状态以隐含方式表达,由行为综合根据源代码进行状态分配和编码。现在的行为综合工具中,状态的更新都采用同步方式,用单相沿触发时钟方案。得到控制器原理图实现代码如下:modulegcdControlUnit(inputclk,inputreset,//Datasignalsinputinput_available,//signaltobeginthe//'CALC'stateinputresult_taken,outputregresult_rdy,//signalappearswhen//itcomestothe'DONE'state//Controlsignals(ctrl->dpath)outputregA_en,outputregB_en,outputreg[0:1]A_mux_sel,outputregB_mux_sel,//Controlsignals(dpath->ctrl)inputB_zero,inputA_lt_B);在每一状态,控制器和数据路径要完成如下任务:(1)控制器进入新的状态,计算出控制信号和下一状态;(2)控制器把控制信号送往数据路径;(3)数据路径根据控制信号进行相应操作;(4)数据路径存储运算结果,并把各种条件信号送人控制器。(3)定义控制转变的状态机本题中共有3个状态,等待状态wait,用于等待新数据输入。新数据输入后进入下一个状态calc,在此状态完成判断A、B的大小以及相减任务,然后检查B的值,若B=0,则进入下一个状态done,等待用户取走数据,若不满足B=0,则继续判断A、B大小,进行相减操作。(4)实验完整代码:modulemy_gcd(inputclk,//Datasignalsinput[0:7]operand_bits_A,input[0:7]operand_bits_B,output[0:7]result_bits_data,//Controlsignalsinputinput_available,inputreset,outputresult_rdy,inputresult_taken);wirea_en,b_en,b_mux_sel;wire[0:1]a_mux_sel;wireb_zero;wirea_lt_b;gcdDatapathdatapath(.clk(clk),.operand_bits_A(operand_bits_A),.operand_bits_B(operand_bits_B),.result_bits_data(result_bits_data),.A_en(a_en),.B_en(b_en),.A_mux_sel(a_mux_sel),.B_mux_sel(b_mux_sel),.B_zero(b_zero),.A_lt_B(a_lt_b));gcdControlUnitcontrol(.clk(clk),.reset(reset),.input_available(input_available),.result_taken(result_taken),.result_rdy(result_rdy),.A_en(a_en),.B_en(b_en),.A_mux_sel(a_mux_sel),.B_mux_sel(b_mux_sel),.B_zero(b_zero),.A_lt_B(a_lt_b));endmodulemodulegcdDatapath(inputclk,//Datasignalsinput[0:7]operand_bits_A,input[0:7]operand_bits_B,output[0:7]result_bits_data,//Controlsignals(ctrl->dpath)inputA_en,inputB_en,input[0:1]A_mux_sel,inputB_mux_sel,//Controlsignals(dpath->ctrl)outputB_zero,outputA_lt_B);//wireswillbeusedinthemiddleofthismodulewire[0:7]B;//outputofthedflipflopwire[0:7]A;wire[0:7]sub_out;//outputofthesubtractionwire[0:7]A_mux_out;//outputofthemuxn_1(n=3or2)wire[0:7]B_mux_out;//noregisterfor'A'or'B',usetheDflipflopinsteadmux3_1u1_mux3_1(.IN0(operand_bits_A),.IN1(B),.IN2(sub_out),.SEL(A_mux_sel),.OUT(A_mux_out));//DflipflopwithenableED_FFA_ff(.clk(clk),.en_p(A_en),.d_p(A_mux_out),.q_np(A));mux2_1u2_mux2_1(.IN0(operand_bits_B),.IN1(A),.SEL(B_mux_sel),.OUT(B_mux_out));ED_FFB_ff(.clk(clk),.en_p(B_en),.d_p(B_mux_out),.q_np(B));//whentherighthandhaschanged,the'assign'sentencewillwork.assignB_zero=(B==0);assignA_lt_B=(A<B);assignsub_out=A-B;//whenB==0result_bits_dataequalstoA.assignresult_bits_data=A;endmodulemodulegcdControlUnit(inputclk,inputreset,//Datasignalsinputinput_available,//signaltobeginthe'CALC'//stateinputresult_taken,outputregresult_rdy,//signalappearswhenit//comestothe'DONE'state//Controlsignals(ctrl->dpath)outputregA_en,outputregB_en,outputreg[0:1]A_mux_sel,outputregB_mux_sel,//Controlsignals(dpath->ctrl)inputB_zero,inputA_lt_B);//therearethreestatesaltogether.localparamWAIT=2'b00;//localparamsarescopedconstantslocalparamCALC=2'b01;localparamDONE=2'b10;reg[0:1]state_next;wire[0:1]state_current;//localparamA_MUX_SEL_IN=2'b00;localparamA_MUX_SEL_B=2'b01;localparamA_MUX_SEL_SUB=2'b10;localparamA_MUX_SEL_X=2'bxx;localparamB_MUX_SEL_IN=1'b0;localparamB_MUX_SEL_A=1'b1;localparamB_MUX_SEL_X=1'bx;//initialnizethecontrolunitvcRDFF_pfstate_pf(.clk(clk),.reset(reset),.d(state_next),.q(state_current));always@(*)begin//stoptheworkingofmuxandDflipflopA_mux_sel=A_MUX_SEL_X;A_en=1'b0;B_mux_sel=B_MUX_SEL_X;B_en=1'b0;result_rdy=1'b0;case(state_current) WAIT: begin A_mux_sel=A_MUX_SEL_IN; A_en=1'b1; B_mux_sel=B_MUX_SEL_IN; B_en=1'b1; end CALC: begin if(A_lt_B) begin A_mux_sel=A_MUX_SEL_B; A_en=1'b1; B_mux_sel=B_MUX_SEL_A; B_en=1'b1; end elseif(!B_zero) begin A_mux_sel=A_MUX_SEL_SUB; A_en=1'b1; end end DONE: begin result_rdy=1'b1; endendcaseend//Nextstatelogicalwaysbegin//Defaultistostayinthesamestatestate_next=state_current;case(state_current) WAIT: if(input_available==1) state_next=CALC; CALC: if(B_zero==1) state_next=DONE; DONE: if(result_taken==1) state_next=WAIT; endcaseendendmodule//thefollowingarethemodulesusedineitherthe'datapath'or'controlunit'module//3路选择器modulemux3_1(IN0,IN1,IN2,SEL,OUT);input[0:7]IN0,IN1,IN2;input[0:1]SEL;output[0:7]OUT;reg[0:7]OUT;always@(*)begincase(SEL)2'b00:OUT=IN0;2'b01:OUT=IN1;2'b10:OUT=IN2;endcaseendendmodule//2路选择器modulemux2_1(IN0,IN1,SEL,OUT);input[0:7]IN0,IN1;inputSEL;output[0:7]OUT;reg[0:7]OUT;always@(*)begincase(SE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论