《《基于fpga的现代数字系统设计》作业参考答案》由会员分享,可在线阅读,更多相关《《基于fpga的现代数字系统设计》作业参考答案(24页珍藏版)》请在金锄头文库上搜索。
1、作业答案3.3 设A=4b1010,B=4b0011,C=1b1,则 下式运算结果是什么? (1) A 0101 (2) A1 0101 (3) A,B0,C 101011 (4) A endendfunction作业答案3.10 定义一个任务,该任务能计算出一个八位变 量的偶校验位作为该任务的输出,计算结束后,经 过三个时钟周期将该校验位赋给任务的输出。 3.10 task parity(even_bit,odd_bit,input_bus); output even_bit,odd_bit; input7:0 input_bus; reg even_bit, odd_bit,a; begi
2、n odd_bit = input_bus; /产生奇校验位 a = odd_bit;end; /产生偶校验位(posedge clk)(posedge clk)(posedge clk) even_bit=a; end endtask作业答案3.12 module mux4(A,B, C,D,sel,data_sel); parameter width = 8; inputwidth-1:0 A,B,C,D; input1:0 sel; outputwidth-1:0 data_sel ; reg width-1:0 data_sel;always(A or B or C or D or s
3、el)begincase(sel)2b00 : data_sel = A; 2b01 : data_sel = B; 2b10 : data_sel = C; 2b11 : data_sel = D; default : $display(“signal is invalid“);endcaseend endmodule作业答案3.12 module mux4(clk,rst,A,B, C,D,sel,data_sel); parameter width = 8; inputwidth-1:0 A,B,C,D; input1:0 sel; input clk,rst; outputwidth-
4、1:0 data_sel ; wire width-1:0 data_sel;assign data_sel=sel1? (sel0 ? D:C): (sel0 ? B:A); endmodule作业答案作业答案设计一个序列检测器,用于检测串行输入的 二进制序列,每当连续输入三个或三个以上 的1时,序列检测器的输出为1,其它情况下输 出为0。 (1)画出状态转移图。 (2)写出Verilog HDL程序(要求在程序中 使用2个always 语句)作业答案状态图: s0:初始状态,电路还未收到一个有效1 s1:收到一个1后的状态 S2:连续收到两个1后的状态 s3:连续收到三个1个后的状态 作业
5、答案module fsm(clk,reset, ina,out); input clk,ina; output out; reg out; parameter s0 = 2b00,s1 =2b01, s2 =2b10,s3=2b11; reg0:1 state,next_state; always (posedge clk) beginif (!reset) state = s0 ;elsestate=next_state; end always (state or ina) begincase(state ) s0:begin next_state=(ina)?s1:s0;out=0; en
6、d s1:begin next_state=(ina)?s2:s0;out=0; end s2:begin next_state=(ina)?s3:s0;out=0; end s3:begin next_state=(ina)?s3:s0;out=1; end endcase end endmodule作业答案作业: 下图是一个A/D采集系统,要求设计其中的 FPGA采集控制模块,该模块由三个部分构 成:控制器(Control)、地址计数器( addrcnt)、内嵌双口RAM(adram)。控 制器(control)是一个有限状态机,完成对 AD574的控制,和adram的写入操作。 adra
7、m是一个双口RAM IP核,在wren为1 时允许写入数据。A/D采集系统作业答案AD574逻辑 控制真值表(X表示任意)AD574工作时序作业答案 下面表列出了AD574的控制方式(X表示任意信号)和控制 时序图(STATUS为高电平,FPGA等待A/D转换,STATUS 为低电平,A/D转换完成,数据输出有效):CECSRCK12_8A0工 作 状 态0XXXX禁止100X1启动8位转换 10101转换 后数据输出有效作业答案回答问题: 1)试画出控制器Control模块的状态机的状态 图。 2)地址计数器每当ClkInc时钟上升沿到达,输 出地址加1,请对地址计数器模块(addrcnt)
8、 进行Verilog HDL描述。 3)根据问题1)的状态图,试对控制器Control模 块进行Verilog HDL描述。 4) 已知adram的端口描述如下,试用例化语句 ,对整个FPGA采集控制模块进行顶层模块的 Verilog HDL描述(顶层名设为ADC574)。作业答案 1)试画出控制器Control模块的状态机的状态 图。作业答案2) 地址计数器每当ClkInc时钟上升沿到达,输出地址加1,请对 该模块进行verilog描述。 module cnt64(ClkInc, Cntclr, Wraddr);input ClkInc, Cntclr; output5:0 Wraddr;r
9、eg5:0 Wraddr; always(posedge ClkInc or posedge Cntclr) begin if(Cntclr) Wraddr=6d0; else Wraddr=Wraddr+1; end endmodule作业答案3) 根据状态图,试对control进行Verilog描述. module control(CLK, STATUS, ADData, CS, CE, A0, RC, K12_8, ClkInc, rddata);input CLK, STATUS; /时钟信号和AD转换状态信号输入input7:0 ADData; /转换数据输入output CS, C
10、E, A0, RC, K12_8; / AD574控制信号output ClkInc; /地址计数器时钟信号output7:0 rddata; /转换数据输出parameter s0=0,s1=1,s2=2,s3=3,s4=4;reg2:0 st;reg lock;reg CS, CE,RC; 作业答案assign K12_8=1b0;assign A0=1b1;assign ClkInc=(lock=1b1)?1:0;assign rddata=(lock=1b1)?ADData:rddata;always(posedge CLK) begincase(st)s0: begin st = s
11、1; RC =1b1; CE=1b0; CS =1b1; lock =1b0;ends1: begin st = s2; RC =1b0; CE=1b1; CS =1b0; lock =1b0;end作业答案s2: if(!STATUS) st = s3; else begin st = s2; RC =1b1; CE=1b1; CS =1b0; lock =1b0;end s3:begin st = s4;RC =1b1;CE =1b1;CS =1b0;lock =1b1;end s4: begin st = s0;RC =1b1;CE =1b1;CS =1b0;lock =1b0;end
12、default:st=s0; endcase end endmodule作业答案5) 已知adram的端口描述如下,试用例化语句,对整个FPGA采 集控制模块进行Verilog顶层描述。顶层名为ADC574. module ADC574(CLK, STATUS, ADDATA, Cntclr, Rdaddr, CS, CE, A0, RC, K12_8, rddata);input CLK, STATUS; /时钟信号和AD转换状态信号输入input7:0 ADDATA; /转换数据输入input Cntclr; /计数器清零信号input5:0 Rdaddr; / adram读数地址 out
13、put CS, CE, A0, RC, K12_8; / AD574控制信号 output7:0 rddata; / adram读数据输出 wire ClkInc; wire5:0 Wraddr; wire7:0 r_data; wire wren; 作业答案5) 已知adram的端口描述如下,试用例化语句,对整个FPGA采 集控制模块进行Verilog顶层描述。顶层名为ADC574. module ADC574(CLK, STATUS, ADDATA, Cntclr, Rdaddr, CS, CE, A0, RC, K12_8, rddata);input CLK, STATUS; /时钟信
14、号和AD转换状态信号输入input7:0 ADDATA; /转换数据输入input Cntclr; /计数器清零信号input5:0 Rdaddr; / adram读数地址 output CS, CE, A0, RC, K12_8; / AD574控制信号 output7:0 rddata; / adram读数据输出 wire ClkInc; wire5:0 Wraddr; wire7:0 r_data; wire wren; 作业答案assign wren=1b1; control u1(.CLK(CLK), .STATUS(STATUS), .ADDATA(ADDATA), .CS(CS), .CE(CE), .A0(A0), .RC(RC), .K12_8(K12_8), .ClkInc(ClkInc), .rddata(r_data); cnt64 u2(.ClkInc(ClkInc), .Cntclr(Cntclr), .Wraddr(Wraddr); adram u3(.data(r_data), .wraddress(Wraddr), .rdaddress(Rdaddr), .wren(wren),.q(rddata); endmodule