您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 股票报告 > FPGA作业参考答案
作业答案3.3设A=4´b1010,B=4´b0011,C=1'b1,则下式运算结果是什么?(1)~A0101(2)A10101(3){A,B[0],C}101011(4)A&B0010(5)A^B1001(6)AB03.5有一个模块名为my_module,其输入/输出端口情况如题图3.1所示,试写出模块VerilogHDL的描述框架,即模块的定义、端口罗列和端口定义等。modulemy_modudle(AIN,BIN,CIN,CLK,ENABLE,RESETDATA_OUT)Input[3:0]AIN;Input[2:0]BIN;Input[1:0]CIN;InputCLK,ENABLE,RESET;Output[4:0]DATA_OUT;…….作业答案3.6在下面的initial块中,根据每条语句的执行时刻,写出每个变量在仿真过程中和仿真结束时的值。initialbeginA=1'b0;B=1'b1;C=2'b10;D=4'b1100;#10beginA=1'b1;B=1'b0;end#15beginC=#52'b01;end#10beginD=#7{A,B,C};endend作业答案3.6#0A=1’b0,B=1’b1,C=2’b10,D=4’b1100,#10A=1’b1,B=1’b0,C=2’b10,D=4’b1100,#30A=1’b1,B=1’b0,C=2’b01,D=4’b1100,#42A=1’b1,B=1’b0,C=2’b01,D=4’b1001.作业答案3.7定义一个深度为256,位宽为8比特的寄存器型数组,用for语句对该数组进行初始化,要求把所有的偶元素初始化为0,所有的奇元素初始化为1。3.7…….reg[7:0]stage[255:0]initialbeginfor(i=0;i256;i=i+2)stage[i]=0;for(i=1;i256;i=i+2)state[i]=1;end作业答案3.8设计一个移位函数,输入一个位宽是32比特的数data,和一个左移、右移的控制信号shift_contr[1:0],shift_contr[1]=1,data左移一位,shift_contr[0]=1,data右移一位,函数返回移位后的数值。3.8function[31:0]shiftinput[31:0]data_in;input[1:0]shift_contr;beginif(shift_contr[1])shift=data_in1;if(shift_contr[0])shift=data_in1;endendfunction作业答案3.10定义一个任务,该任务能计算出一个八位变量的偶校验位作为该任务的输出,计算结束后,经过三个时钟周期将该校验位赋给任务的输出。3.10taskparity(even_bit,odd_bit,input_bus);outputeven_bit,odd_bit;input[7:0]input_bus;regeven_bit,odd_bit,a;beginodd_bit=^input_bus;//产生奇校验位a=~odd_bit;end;//产生偶校验位@(posedgeclk)@(posedgeclk)@(posedgeclk)even_bit=a;endendtask作业答案3.12modulemux4(A,B,C,D,sel,data_sel);parameterwidth=8;input[width-1:0]A,B,C,D;input[1:0]sel;output[width-1:0]data_sel;reg[3:0]data_sel;always@(AorBorCorDorsel)begincase(sel)2'b00:data_sel=A;2'b01:data_sel=B;2'b10:data_sel=C;2'b11:data_sel=D;default:$display(signalisinvalid);endcaseendendmodule作业答案3.12modulemux4(clk,rst,A,B,C,D,sel,data_sel);parameterwidth=8;input[width-1:0]A,B,C,D;input[1:0]sel;inputclk,rst;output[width-1:0]data_sel;wire[3:0]data_sel;assigndata_sel=sel[1]?(sel[0]?D:C):(sel[0]?B:A);endmodule作业答案作业答案设计一个序列检测器,用于检测串行输入的二进制序列,每当连续输入三个或三个以上的1时,序列检测器的输出为1,其它情况下输出为0。(1)画出状态转移图。(2)写出VerilogHDL程序(要求在程序中使用2个always语句)作业答案状态图:s0:初始状态,电路还未收到一个有效1s1:收到一个1后的状态S2:连续收到两个1后的状态s3:连续收到三个1个后的状态S0S1S3S21/00/01/00/00/00/01/11/1作业答案modulefsm(clk,reset,ina,out);inputclk,ina;outputout;regout;parameters0=2‘b00,s1=2’b01,s2=2‘b10,s3=2’b11;reg[0:1]state,next_state;always@(posedgeclk)beginif(!reset)state=s0;elsestate=next_state;endalways@(stateorina)begincase(state)s0:beginnext_state=(ina)?s1:s0;out=0;ends1:beginnext_state=(ina)?s2:s0;out=0;ends2:beginnext_state=(ina)?s3:s0;out=0;ends3:beginnext_state=(ina)?s3:s0;out=1;endendcaseendendmodule作业答案作业:•下图是一个A/D采集系统,要求设计其中的FPGA采集控制模块,该模块由三个部分构成:控制器(Control)、地址计数器(addrcnt)、内嵌双口RAM(adram)。控制器(control)是一个有限状态机,完成对AD574的控制,和adram的写入操作。adram是一个双口RAMIP核,在wren为’1’时允许写入数据。A/D采集系统作业答案放大采样/保持AnalogIn信号预处理FPGA采集控制adram(lpm_ram_dp)ControlAD574CSADData8CEA0RCK12_8地址计数器CLKClkIncCntclrwraddr6wrenrddata8rddatardaddr681STATUSAD574逻辑控制真值表(X表示任意)AD574工作时序作业答案•下面表列出了AD574的控制方式(X表示任意信号)和控制时序图(STATUS为高电平,FPGA等待A/D转换,STATUS为低电平,A/D转换完成,数据输出有效):CECSRCK12_8A0工作状态0XXXX禁止100X1启动8位转换10101转换后数据输出有效作业答案回答问题:•1)试画出控制器Control模块的状态机的状态图。•2)地址计数器每当ClkInc时钟上升沿到达,输出地址加1,请对地址计数器模块(addrcnt)进行VerilogHDL描述。•3)根据问题1)的状态图,试对控制器Control模块进行VerilogHDL描述。•4)已知adram的端口描述如下,试用例化语句,对整个FPGA采集控制模块进行顶层模块的VerilogHDL描述(顶层名设为ADC574)。作业答案•1)试画出控制器Control模块的状态机的状态图。作业答案2)地址计数器每当ClkInc时钟上升沿到达,输出地址加1,请对该模块进行verilog描述。modulecnt64(ClkInc,Cntclr,Wraddr);inputClkInc,Cntclr;output[5:0]Wraddr;reg[5:0]Wraddr;always@(posedgeClkIncorposedgeCntclr)beginif(Cntclr)Wraddr=6'd0;elseWraddr=Wraddr+1;endendmodule作业答案3)根据状态图,试对control进行Verilog描述.modulecontrol(CLK,STATUS,ADData,CS,CE,A0,RC,K12_8,ClkInc,rddata);inputCLK,STATUS;//时钟信号和AD转换状态信号输入input[7:0]ADData;//转换数据输入outputCS,CE,A0,RC,K12_8;//AD574控制信号outputClkInc;//地址计数器时钟信号output[7:0]rddata;//转换数据输出parameters0=0,s1=1,s2=2,s3=3,s4=4;reg[2:0]st;reglock;regCS,CE,RC;作业答案assignK12_8=1'b0;assignA0=1'b1;assignClkInc=(lock==1'b1)?1:0;assignrddata=(lock==1'b1)?ADData:rddata;always@(posedgeCLK)begincase(st)s0:beginst=s1;RC=1'b1;CE=1'b0;CS=1'b1;lock=1'b0;ends1:beginst=s2;RC=1'b0;CE=1'b1;CS=1'b0;lock=1'b0;end作业答案s2:if(!STATUS)st=s3;elsebeginst=s2;RC=1'b1;CE=1'b1;CS=1'b0;lock=1'b0;ends3:beginst=s4;RC=1'b1;CE=1'b1;CS=1'b0;lock=1'b1;ends4:beginst=s0;RC=1'b1;CE=1'b1;CS=1'b0;lock=1'b0;enddefault:st=s0;endcaseendendmodule作业答案5)已知adram的端口描述如下,试用例化语句,对整个FPGA采集控制模块进行Verilog顶层描述。顶层名为ADC574.moduleADC574(CLK,STATUS,ADDATA,Cntclr,Rdaddr,CS,CE,A0,RC,K12_8,rddata);inputCLK,STATUS;//时钟信号和AD转换状态信号输入input[7:0]ADDATA;//转换数据输入inputCntclr;//计数器清零信号input[5:0]Rdaddr;//adram读数地址outputCS,CE,A0,RC,K12_8;//AD574控制信号output[7:0]rddata;//adram读数据输出wireClkInc;wire[5:0]Wraddr;wire[7:0]r_data;wirewren;作业答案5)已知adram的端口描述如下,试用例化语句,对整个FPGA采集控制模块进行Verilog顶层描述。顶层名为ADC574.moduleADC574(CLK,STATUS,ADDATA,Cntclr,Rdaddr,CS,CE,A0,RC,K12_8,rddata);inputCLK,STATUS;//时钟信号和AD转换状态信号输入input[7:0]ADDATA;//转换数据输入inputCntclr;//计数器清零信号input[5:0]Rdaddr;//adram读数地址outputCS,CE,A0,RC,K12_8;//AD574控制信号output[7:0]rddata;//adram读数据输出wireClkInc;wire[5:0]Wraddr;wire[7:0
本文标题:FPGA作业参考答案
链接地址:https://www.777doc.com/doc-4889096 .html