英语门户网站织梦源码,wordpress 推荐插件,合肥建筑公司,wordpress最新主题下载地址需求 在使能信号控制下#xff0c;计算输入脉冲的每两个上升沿之间的时钟周期数并输出#xff0c;即输出脉冲频率的计数值 输入信号 周期性脉冲信号#xff1a;需要做检测的脉冲频率信号 使能信号#xff1a;高电平进行频率计数#xff0c;低电平清零计数器 输出信号 计数… 需求 在使能信号控制下计算输入脉冲的每两个上升沿之间的时钟周期数并输出即输出脉冲频率的计数值 输入信号 周期性脉冲信号需要做检测的脉冲频率信号 使能信号高电平进行频率计数低电平清零计数器 输出信号 计数值输出脉冲频率的计数值 有效信号该信号拉高时输出计数值有效 需求分析 1输出产生计数完成状态《EN 且有上升沿脉冲 2输出计数值《上升沿来临时候从0开始计数直至下一个上升沿脉冲到来结束把计数值传出去 框图分析 vlg_design /
/*
需求在使能信号控制下计算输入脉冲的每两个上升沿之间的时钟周期数并输出即输出脉冲频率的计数值
输入信号周期性脉冲信号需要做检测的脉冲频率信号使能信号高电平进行频率计数低电平清零计数器
输出信号计数值输出脉冲频率的计数值有效信号该信号拉高时输出计数值有效*/
/
timescale 1ns/1ps
module vlg_design(input clk,//100Minput pulse,// input reset_n,input i_en, output [31:0] o_cnt, //输出计数值output o_state);//
//产生pluse 上升沿一个时钟脉冲
reg [1:0]r_pluse;
wire w_pluse_pos;always (posedge clk) beginif(!reset_n) r_pluse b00;else r_pluse {r_pluse[0],pulse};
end
assign w_pluse_pos r_pluse[0] ~r_pluse[1];
assign o_state w_pluse_pos;//
//en 时如果 w_pluse_pos 1 清零否则计数
reg [31:0]r_cnt;
always (posedge clk) beginif(!reset_n)r_cnt b0;else if(!i_en ) r_cnt b0;else if(w_pluse_pos) r_cnt b0;else r_cnt r_cnt 1b1;
end
assign o_cnt w_pluse_pos?r_cnt:b0;endmoduletestbench_top timescale 1ns/1ps
module testbench_top();//参数定义
define CLK_PERIORD 10 //时钟周期设置为10ns100MHz //接口申明
reg clk;
reg pulse;
reg reset_n;
reg i_en;
wire [31:0] o_cnt;
wire o_state;vlg_design uut_vlg_design(.clk(clk),.pulse(pulse),.reset_n(reset_n),.i_en(i_en),.o_cnt(o_cnt),.o_state(o_state)); //时钟和复位初始化、复位产生
initial begin
clk 0;
reset_n 0;
#10;
reset_n 1;
clk 1;
pulse b0; //初始化都为0
#10;
i_en 0;
end//时钟产生
always #(CLK_PERIORD/2) clk ~clk;
integer i;//测试激励产生
initial begin
(posedge reset_n); //等待复位完成
(posedge clk);i_en 1;
#2;
//5次循环
for(i 0;i 5;i i1) beginpulse b1;#({$random}%30*10); pulse b0;#20;
endpulse b0;
i_en 0;
#2_000_000;
$stop;
end
endmodule 仿真输出