当前位置:
文档之家› 《基于FPGA的现代数字系统设计》作业参考答案
《基于FPGA的现代数字系统设计》作业参考答案
作业答案
s2: if(!STATUS) st <= s3; else begin st <= s2; RC <=1'b1; CE<=1'b1; CS <=1'b0; lock <=1'b0;end s3: begin st <= s4;RC <=1'b1;CE <=1'b1;CS <=1'b0;lock <=1'b1;end s4: begin st <= s0;RC <=1'b1;CE <=1'b1;CS <=1'b0;lock <=1'b0;end default:st<=s0; endcase end
作业答案
assign K12_8=1'b0; assign A0=1'b1; assign ClkInc=(lock==1'b1)?1:0; assign rddata=(lock==1'b1)?ADData:rddata; always@(posedge CLK) begin case(st) s0: begin st <= s1; RC <=1'b1; CE<=1'b0; CS <=1'b1; lock <=1'b0;end s1: begin st <= s2; RC <=1'b0; CE<=1'b1; CS <=1'b0; lock <=1'b0;end
AD574工作时序
作业答案
回答问题: • 1)试画出控制器Control模块的状态机的状态 图。 • 2)地址计数器每当ClkInc时钟上升沿到达,输 出地址加1,请对地址计数器模块(addrcnt) 进行Verilog HDL描述。 • 3)根据问题1)的状态图,试对控制器Control模 块进行Verilog HDL描述。 • 4) 已知adram的端口描述如下,试用例化语句 ,对整个FPGA采集控制模块进行顶层模块的 Verilog HDL描述(顶层名设为ADC574)。
作业答案 3.6 在下面的initial块中,根据每条语句的执行时 刻,写出每个变量在仿真过程中和仿真结束时的 值。 initial begin A=1'b0; B=1'b1; C=2'b10; D=4'b1100; #10 begin A=1'b1;B=1'b0;end #15 begin C= #5 2'b01;end #10 begin D=#7 {A,B,C}; end end
作业答案
作业: • 下图是一个A/D采集系统,要求设计其中的 FPGA采集控制模块,该模块由三个部分构 成:控制器(Control)、地址计数器( addrcnt)、内嵌双口RAM(adram)。控 制器(control)是一个有限状态机,完成对 AD574的控制,和adram的写入操作。 adram是一个双口RAM IP核,在wren为’1’ 时允许写入数据。
作业答案
3.6
#0 A=1’b0,B=1’b 1,C=2’b10, D=4’b1100, #10 A=1’b 1,B=1’b 0,C=2’b10, D=4’b1100, #30 A=1’b 1,B=1’b 0,C=2’b01, D=4’b1100, #42 A=1’b 1,B=1’b 0,C=2’b01, D=4’b1001.
assign data_sel=sel[1]? (sel[0] ? D:C) : (sel[0] ? B:A); endmodule
作业答案
设计一个序列检测器,用于检测串行输入的 二进制序列,每当连续输入三个或三个以上 的1时,序列检测器的输出为1,其它情况下输 出为0。 (1)画出状态转移图。 (2)写出Verilog HDL程序(要求在程序中 使用2个always 语句)
作业答案 3.8 设计一个移位函数,输入一个位宽是32比特的 数data,和一个左移、右移的控制信号 shift_contr[1:0],shift_contr[1]=1,data左移一位, shift_contr[0]=1,data右移一位,函数返回移位后 的数值。 3.8 function [31:0] shift input[31:0] data_in; input[1:0] shift_contr; begin if (shift_contr[1]) shift= data_in <<1; if (shift_contr[0]) shift= data_in >>1; end endfunction
作业答案 3.7 定义一个深度为256,位宽为8比特的寄存器型 数组,用for语句对该数组进行初始化,要求把所有 的偶元素初始化为0,所有的奇元素初始化为1。 3.7 ……. reg [7:0] stage [255:0] initial begin for(i=0;i<256;i=i+2) stage[i] = 0; for(i=1;i<256;i=i+2) state[i]=1; end
作业答案
信号预处理 放大 采样/保持 AD574
ADData 8 STATUS CS CE A0
rddata 1
8
wren
adram (lpm_ram_dp)
8 rddata rdaddr 6
Control
6 ClkInc wraddr Cntclr
Anal集系统
作业答案
5) 已知adram的端口描述如下,试用例化语句,对整个FPGA采 集控制模块进行Verilog顶层描述。顶层名为ADC574. module ADC574(CLK, STATUS, ADDATA, Cntclr, Rdaddr, CS, CE, A0, RC, K12_8, rddata); input CLK, STATUS; //时钟信号和AD转换状态信号输入 input[7:0] ADDATA; //转换数据输入 input Cntclr; //计数器清零信号 input[5:0] Rdaddr; // adram读数地址 output CS, CE, A0, RC, K12_8; // AD574控制信号 output[7:0] rddata; // adram读数据输出 wire ClkInc; wire[5:0] Wraddr; wire[7:0] r_data; wire wren;
作业答案
3.10 定义一个任务,该任务能计算出一个八位变 量的偶校验位作为该任务的输出,计算结束后,经 过三个时钟周期将该校验位赋给任务的输出。
3.10 task parity(even_bit,odd_bit,input_bus); output even_bit,odd_bit; input[7:0] input_bus; reg even_bit, odd_bit,a; begin odd_bit = ^ input_bus; //产生奇校验位 a = ~odd_bit;end; //产生偶校验位 @(posedge clk) @(posedge clk) @(posedge clk) even_bit=a; end endtask
作业答案
3) 根据状态图,试对control进行Verilog描述. module control(CLK, STATUS, ADData, CS, CE, A0, RC, K12_8, ClkInc, rddata); input CLK, STATUS; //时钟信号和AD转换状态信号输入 input[7:0] ADData; //转换数据输入 output CS, CE, A0, RC, K12_8; // AD574控制信号 output ClkInc; //地址计数器时钟信号 output[7:0] rddata; //转换数据输出 parameter s0=0,s1=1,s2=2,s3=3,s4=4; reg[2:0] st; reg lock; reg CS, CE,RC;
FPGA采集控制
作业答案
• 下面表列出了AD574的控制方式(X表示任意信号)和控制 时序图(STATUS为高电平,FPGA等待A/D转换,STATUS 为低电平,A/D转换完成,数据输出有效):
AD574逻辑控制真值表(X表示任意)
CE 0 1 1 CS X 0 0 RC X 0 1 K12_8 X X 0 A0 X 1 1 工 作 状 态 禁止 启动8位转换 转换后数据输出有效
作业答案 3.12 module mux4(A,B, C,D,sel,data_sel); parameter width = 8; input[width-1:0] A,B,C,D; input[1:0] sel; output[width-1:0] data_sel ; reg [width-1:0] data_sel; always@(A or B or C or D or sel) begin case(sel) 2'b00 : data_sel <= A; 2'b01 : data_sel <= B; 2'b10 : data_sel <= C; 2'b11 : data_sel <= D; default : $display("signal is invalid"); endcase end endmodule
作业答案 3.3 设A=4´b1010,B=4´b0011,C=1'b1, 则下式运算结果是什么? (1) ~A 0101 (2) A>>1 0101 (3) {A,B[0],C} 101011 (4) A & B 0010 (5) A ^B 1001 (6) A<B 0