FPGA 2级D 触发器
D触发器
在时钟上升沿,D输入0,Q输出1
在时钟上升沿,D输入1,Q输出0
输出只在上升沿发生变化。
一般的;
module ex_module(
input wire sclk,
input wire rst_n,
input wire [7:0] d,//声明模块时输入必须是wire变量,构件之间的物理连线
input wire [7:0] q,//模块声明时输出可以是wire变量给,也可以是reg变量,REG 用于时序逻辑,reg 用于 always @ (posedge clk) 的always 块中。
);
always @(posedge sclk or negedge rst_n)//敏感列表可以包括电平触发或沿触发
if(rst_n==1’b0)//条件表,这里是组合逻辑,一个比较器,1比特,b表示2进制
q<=8’h00;//沿触发的逻辑里面一定要用,<=非阻塞值
else
q<=d;
endmodule
这里2个异步D触发器
那么2级D触发器的作用是什么
就是
时钟信号与复位信号有一个亚稳态我们用两个D触发器连起来中间设一个延时,亚稳态信号很小且时间短暂,到第二个D触发器时就基本上消失了,当然也可以继续加D触发器,不过一般2个就足够了。
对于它的程序
module prac (
clk,
reset_n,
dataa,
datab,
outa,
outb
);
input clk;
input reset_n;
input dataa;
input datab;
output outa;
output outb;
reg reg1;
reg reg2;
reg reg3;
reg reg4;
assign outa = reg1;
assign outb = reg2;
assign rst_n = reg4;
always @ (posedge clk or negedge reset_n) //“异步复位同步释放”的复位模块
begin
if (!reset_n)
begin
reg3 <= 1'b0;
reg4 <= 1'b0;
end
else
begin
reg3 <= 1'b1;
reg4 <= reg3;
end
end
always @ (posedge clk or negedge rst_n) //功能模块,注意rst_n是沿变驱动。
begin
if (!rst_n)
begin
reg1 <= 1'b0;
reg2 <= 1'b0;
end
else
begin
reg1 <= dataa;
reg2 <= datab;
end
end
endmodule