计划将常见电路的verilog实现进行总结,如有不对的地方,欢迎大家批评指正,先放目录
一、边沿检测
二、串并转换
三、分频器
一、边沿检测
首先对数据打两拍,然后通过两拍数据之间的逻辑关系来判断出是上升沿还是下降沿
module edge_detect(
input clk,
input rst_n,
input data,
output pos_edge,
output neg_edge
);
reg data_d0,data_d1;
always@(posedge clk or negedge rst_n)
if(~rst_n)begin
data_d0 <= 'h0;
data_d1 <= 'h0;
end
else begin
data_d0 <= data;
data_d1 <= data_d0;
end
assign pos_edge = data_d0 && ~data_d1;
assign neg_edge = ~data_d0 && data_d1;
endmodule
仿真代码
module tb_edge_detect();
parameter PERIOD = 10;
bit clk;
reg rst_n;
reg data;
wire pos_edge;
wire neg_edge;
always #(PERIOD/2) clk = ~clk;
initial begin
rst_n=1'b1;
#20;
rst_n=1'b1;
@(posedge clk);
data=1'b1;
#40;