文档详情

FPGA作业二.doc

发布:2017-12-12约3.64千字共7页下载文档
文本预览下载声明
设计一个能求出一个32bit字中两个相邻0之间最大间隙的电路。完成HDL设计及testbench描述,给出综合后的时序仿真结果。提交纸质文档。 系统化分为状态机控制器和数据通路,信号的接口关系可参考下图所示: 数据通路包括一个位计数器(k)、一个存储寄存器(tmp)、一个间隙寄存器(Gap)。 控制器产生的控制信号包括: flush_tmp:清空tmp寄存器 incr_tmp: 增加tmp寄存器 store_tmp:用tmp加载Gap incr_k: 增加k计数器 程序 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 16:39:28 04/09/2016 // Design Name: // Module Name: top2 // Project Name: // Target Devices: // Tool versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // ////////////////////////////////////////////////////////////////////////////////// module top2( input clk, input rst, input [31:0] data_in, output [5:0] gap ); reg [5:0] tmp,k,gap; reg flush_tmp,store_tmp,incr_k,incr_tmp; parameter s_idle=0,s_1=1,s_2=2,s_done=3; reg[1:0] state,next_state; wire Bit=data_in[k]; always @(posedge clk,posedge rst) if(rst) state=s_idle; else state=next_state; always @(state or Bit or k) begin next_state=state; incr_tmp=0; incr_k=0; store_tmp=0; flush_tmp=0; case(state) s_idle: if(k==31) next_state=s_done; else if(!Bit) begin next_state=s_1; incr_k=1; end else begin next_state=s_idle; incr_k=1; end s_1: if(k==31) next_state=s_done; else if(Bit) begin next_state=s_2; incr_k=1; incr_tmp=1; end else begin next_state=s_1; incr_k=1; end s_2 : if(k==31) if(!Bit) if(tmpgap)begin store_tmp=1; next_state=s_done; end else begin next_state=s_done; end else begin next_state=s_done; end else begin if(!Bit) if(tmpgap)begin store_tmp=1; next_state=s_1; incr_k=1; flush_tmp=1; end
显示全部
相似文档