数电第六周周结_by_yc
- 时序逻辑电路的设计要点:
①只有时钟信号和复位信号可以放在敏感列表里;
②使用非阻塞赋值,即使用"<=";
③无需对所有分支进行描述,对于未描述的分支,变量将保持原值;
④如果敏感列表中,有一个信号是边沿触发,则所有信号都得使用边沿触发。
- 锁存器: 当时钟为高电平时,输出才会随输入数据的变化而更新。
//基本锁存器
module latch(clk, d, q);
input clk, d;
output q;
always @(clk, d) begin
if(clk)
q<=d;
end
endmodule
//含复位控制的锁存器:高电平有效,低电平复位
module latch_reset(clk, rstn, d, q);
input clk, rstn;
input d;
output q;
always @(clk, rstn, d) begin
if(!rstn)
q<=0;
else if(clk)
q<=d;
end
endmodule
- 触发器: 只有在时钟上升沿时才会更新数据
//基本D触发器
module dff(clk, d, q);
input clk;
input d;
output reg q;
always @(posedge clk)
q<=d;
endmodule
//含异步复位信号的D触发器:高电平有效,低电平复位
module dff_reset(clk, rstn, d, q);
input clk, rstn;
input d;
output reg q;
always @(posedge clk, negedge rstn) begin
if(~rstn)
q<=1'b0;
else
q<=d;
end
endmodule
//同步复位信号的D触发器
module dff_reset(clk, rstn, d, q);
input clk, rstn;
input d;
output reg q;
always @(posedge clk) begin
if(~rstn)
q<=1'b0;
else
q<=d;
end
endmodule
//含异步复位和同步使能的D触发器:使能信号高电平有效;优先级:reset>clk>en.
module dff_reset_en(clk, rstn, en, d, q);
input clk, rstn, en;
input d;
output reg q;
always @(posedge clk, negedge rstn) begin
if(~rstn)
q<=1'b0;
else if(en)
q<=d;
end
endmodule
- 寄存器:
//1位寄存器
module reg1(clk, reset, load, in_data, out_data);
input clk, reset, load;
input in_data;
output reg out_data;
always @(posedge clk, posedge reset) begin
if(reset)
out_data<=1'b0;
else if(load)
out_data<=in_data;
end
endmodule
//N位寄存器
module regN
#(parameter N=8)
(input clk, reset, load,
input [N-1:0] in_data,
output reg [N-1:0] out_data);
always @(posedge clk, posedge reset) begin
if(reset)
out_data<=0;
else if(load)
out_data<=in_data;
end
endmodule
标签:reset,en,clk,周结,yc,数电,posedge,input,data
From: https://www.cnblogs.com/Qzzz/p/16756783.html