FPGA作业二.doc
文本预览下载声明
设计一个能求出一个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
显示全部