一个16bit字中两个相邻1之间最大间隙的电路verilog

设计一个能求出一个16bit字中两个相邻1之间最大间隙的电路。完成HDL设计及testbench描述,给出综合后的时序仿真结果。提交纸质文档。

系统化分为状态机控制器和数据通路,信号的接口关系如图(a)所示:

数据通路包括一个位计数器(k)、一个存储寄存器(tmp)、一个间隙寄存器(Gap)。

控制器产生的控制信号包括:

flush_tmp:清空tmp寄存器

incr_tmp: 增加tmp寄存器

store_tmp:用tmp加载Gap

incr_k: 增加k计数器

Verilog 代码:

module gap(data,clk,rst,gap);

input clk,rst;

input [15:0] data;

output [3:0] gap;

reg [3:0] gap,tmp,k;

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[k];

always @(posedge clk,posedge rst)

if(rst)

state

else

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==15) 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==15) 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==15)

if(Bit)

if(tmp>gap)

begin store_tmp=1;next_state=s_done;end else next_state=s_done;

else next_state=s_done;

else begin

if(Bit)

if(tmp>gap)

begin

store_tmp=1;next_state=s_1;incr_k=1;flush_tmp=1;end

else begin flush_tmp=1;incr_k=1;end

else begin incr_tmp=1;incr_k=1;next_state=s_2;end

end

s_done : begin next_state=s_idle;incr_k=1;end

default :next_state=s_idle;

endcase

end

always @(posedge clk,posedge rst)

begin

if(rst)

begin

k

tmp

gap

end

else

begin

if(flush_tmp) tmp

if(store_tmp) gap

if(incr_k)k

if(incr_tmp) tmp

end

end

endmodule

test-bench:

`timescale 1 ns/ 1 ps

module gap_vlg_tst();

reg clk;

reg [15:0] data;

reg rst;

wire [3:0] gap;

gap i1 (

.clk(clk),

.data(data),

.gap(gap),

.rst(rst)

);

initial

begin rst=1;

clk=0;

#10 rst=0;data=16'b1000_0000_0010_0001;

#640 rst=1; data=16'b1000_0000_0000_0001;

#10 rst=0;

#640 rst=1; data=16'b1000_1110_0010_0001;

#10 rst=0;

$display("Running testbench");

end

always #20 clk=~clk; endmodule

仿真波形:

设计一个能求出一个16bit字中两个相邻1之间最大间隙的电路。完成HDL设计及testbench描述,给出综合后的时序仿真结果。提交纸质文档。

系统化分为状态机控制器和数据通路,信号的接口关系如图(a)所示:

数据通路包括一个位计数器(k)、一个存储寄存器(tmp)、一个间隙寄存器(Gap)。

控制器产生的控制信号包括:

flush_tmp:清空tmp寄存器

incr_tmp: 增加tmp寄存器

store_tmp:用tmp加载Gap

incr_k: 增加k计数器

Verilog 代码:

module gap(data,clk,rst,gap);

input clk,rst;

input [15:0] data;

output [3:0] gap;

reg [3:0] gap,tmp,k;

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[k];

always @(posedge clk,posedge rst)

if(rst)

state

else

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==15) 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==15) 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==15)

if(Bit)

if(tmp>gap)

begin store_tmp=1;next_state=s_done;end else next_state=s_done;

else next_state=s_done;

else begin

if(Bit)

if(tmp>gap)

begin

store_tmp=1;next_state=s_1;incr_k=1;flush_tmp=1;end

else begin flush_tmp=1;incr_k=1;end

else begin incr_tmp=1;incr_k=1;next_state=s_2;end

end

s_done : begin next_state=s_idle;incr_k=1;end

default :next_state=s_idle;

endcase

end

always @(posedge clk,posedge rst)

begin

if(rst)

begin

k

tmp

gap

end

else

begin

if(flush_tmp) tmp

if(store_tmp) gap

if(incr_k)k

if(incr_tmp) tmp

end

end

endmodule

test-bench:

`timescale 1 ns/ 1 ps

module gap_vlg_tst();

reg clk;

reg [15:0] data;

reg rst;

wire [3:0] gap;

gap i1 (

.clk(clk),

.data(data),

.gap(gap),

.rst(rst)

);

initial

begin rst=1;

clk=0;

#10 rst=0;data=16'b1000_0000_0010_0001;

#640 rst=1; data=16'b1000_0000_0000_0001;

#10 rst=0;

#640 rst=1; data=16'b1000_1110_0010_0001;

#10 rst=0;

$display("Running testbench");

end

always #20 clk=~clk; endmodule

仿真波形:


相关文章

  • 各大公司笔试题目
  • 各大公司笔试题目(全) 模拟电路 1.基尔霍夫定理的内容是什么?(仕兰微电子) 2.平板电容公式(C=εS/4πkd) .(未知) 3.最基本的如三极管曲线特性.(未知) 4.描述反馈电路的概念,列举他们的应用.(仕兰微电子) 5.负反馈种 ...查看


  • 7人表决控制电路
  • 摘 要 7人表决控制电路是一简单的输入信号检测与处理.产生输出控制信号的逻辑电路.本文详细介绍了依据功能要求进行控制电路方案设计的过程,并在此基础上将整体电路分为输入信号处理模块, 计时模块, 译码模块,比较模块,显示模块等主要功能模块.实 ...查看


  • 频率测试fpga实现
  • 一种简单的频率测试方法及Verilog 实现 (2012-05-23 22:30:35) 转载▼ 标签: verilog 对于频率测量,有很多的测试方法,这里我们介绍一种采用基准频率计数的方法测试频率.该测试方法非常容易理解.首先设计两个计 ...查看


  • 数字电路试题_苦中作乐
  • 1.同步电路和异步电路的区别是什么?(仕兰微电子) 2.什么是同步逻辑和异步逻辑?(汉王笔试) 同步逻辑是时钟之间有固定的因果关系.异步逻辑是各时钟之间没有固定的因果关系. 3.什么是"线与"逻辑,要实现它,在硬件特性上 ...查看


  • Verilog语言的特点
  • 一.第一章 1. 几个英文缩写: PLA(Programmable Logic Array)可编程逻辑阵列 FPGA(Field Programmable Gate Array)现场可编程逻辑门阵列 CPLD(Complex Program ...查看


  • FPGA频率计实验报告
  • 数字频率计 用VHDL 语言设计实现基于FPGA 的数字频率计 学校: 学院: 姓名: 学号: 实验室: 实验日期: 摘要 本文介绍了一种基于FPGA 的数字频率的实现方法.该设计采用硬件描述语言VHDL ,在软件开发平台ISE 上完成.该 ...查看


  • 电子笔试题2011年整理目
  • 目录:一.模拟电路 二.IC设计基础(流程.工艺.版图.器件) 三.单片机.MCU.计算机原理 四.信号与系统 五.DSP.嵌入式.软件等 六.主观题 七.共同的注意点 一.模拟电路 1基尔霍夫定理的内容是什么?(仕兰微电子) 基尔霍夫电流 ...查看


  • 湖南工业大学EDA实验报告
  • EDA技术及应用-Verilog HDL版 实 验 报 告 实验一 数字秒表的设计 一. 实验类型 综合性实验 二.实验仪器设备与工具软件 1.PC机(要求内存在256M以上): 2.EDA实验开发系统: 3.Quartus II软件 三. ...查看


  • 华为硬件题目
  • 一 选择(13个题目,没有全部抄下来,涉及的课程有电路,模拟电路,数字电路,信号与系统,微机原 理,网络,数字信号处理) 1.微分电路 2.CISC,RISC 答:CISC(复杂指令集计算机)和RISC(精简指令集计算机)是前CPU 的两种 ...查看


热门内容