当前位置:首页 > > ZYNQ
		


第一种:

rtl可综合电路

//**************************************************************************// *** 名称 : count.v// *** 作者 : 南明离火hk// *** 博客 : https://www.cnblogs.com/jing-shui-liu-shen/// *** 日期 : 2021-07-08// *** 描述 : 计数器模块//**************************************************************************module count (clk,rst_n,led)    ; input clk     ; //输入50M的时钟 input rst_n   ; //输入复位信号 output reg led     ; //输出ied信号 reg [1:0]    cnt        ; //定义变量cnt的数据类型和数据位//--------------------------------------------------------------- // 计数模块//---------------------------------------------------------------always@(posedge clk or negedge rst_n) begin if(!rst_n) //复位信号拉低 cnt <= 2'b0; //复位时,变量cnt置为0 else if(cnt==3) //当变量cnt为3时 cnt <= 2'b0; //变量cnt置为0 else //其它情况 cnt <= cnt + 2'b1; //变量cnt+1end//--------------------------------------------------------------- // led模块//---------------------------------------------------------------always@(posedge clk or negedge rst_n) begin if(!rst_n) //复位信号拉低 led <= 1'b0; //复位时,变量led置为0 else if(cnt==2'd3) //当变量cnt为3时 led <= 1'b1;  //变量led置为1 else //其它情况 led <= 1'b0; //变量led置为1endendmodule 


testbench

//**************************************************************************// *** 名称 : count_tb.v// *** 作者 : 南明离火hk// *** 博客 : https://www.cnblogs.com/jing-shui-liu-shen/// *** 日期 : 2021-07-08// *** 描述 : 计数器仿真模块//**************************************************************************`timescale 1ns/1ps //·timescale 定义仿真时间单位与精度,1ns是时间单位,即在仿真中用#10表示延迟10ns //1ps表示时间精度,比如你写 #3.5547968525 a <= 1;c <= 1;,那么它时间精度也只会有1ps(即在3.555ns时赋值语句便生效)。`define clock_period 20 //时钟周期为20ns,也就是频率为50MHzmodule count_tb; //在testbench中,输入都是要自己定义的,所以输入信号都是reg,而输出则是wire信号 reg clk; //定义reg型的clk reg rst_n; //定义reg型的rst_n wire led; //定义wire型的rst_n count u_count( //把写好的计数器模块例化进来 .clk(clk),
 .rst_n(rst_n),
 .led(led)
 ); initial clk = 1; //定义clk信号的初始值为1 always #(`clock_period/2) clk = ~clk; //每隔半个时钟周期,clk的值变化一次 initial begin rst_n = 1'b0; //一开始,令复位信号rst_n拉低,表示复位状态有效 #(`clock_period *10); //经过10个时钟周期之后 rst_n = 1'b1; //令复位信号rst_n拉高,表示复位状态无效 #(`clock_period *10); //经过10个时钟周期之后 $stop; //停止 end endmodule


对应的modesim仿真


第二种:

rtl可综合电路

//**************************************************************************// *** 名称 : count.v// *** 作者 : 南明离火hk// *** 博客 : https://www.cnblogs.com/jing-shui-liu-shen/// *** 日期 : 2021-07-08// *** 描述 : 计数器模块//**************************************************************************module count (clk,rst_n,led)    ; input clk     ; //输入50M的时钟 input rst_n   ; //输入复位信号 output reg led     ; //输出ied信号 reg [2:0]      cnt     ; //定义变量cnt的数据类型和数据位宽//--------------------------------------------------------------- // 计数模块//---------------------------------------------------------------always@(posedge clk or negedge rst_n) begin if(!rst_n) //复位信号拉低 cnt <= 2'b0;  //复位时,变量cnt置为0 else if(cnt==4) //当变量cnt为4时 cnt <= 3'b1; //变量cnt置为1 else //其它情况 cnt <= cnt + 3'b1; //变量cnt+1end//--------------------------------------------------------------- // led模块//---------------------------------------------------------------always@(posedge clk or negedge rst_n) begin if(!rst_n) //复位信号拉低 led <= 1'b0; //复位时,变量led置为0 else if(cnt==3'd4) //当变量cnt为4时 led <= 1'b1; //变量led置为1 else //其它情况 led <= 1'b0;  //变量led置为1endendmodule 


testbench同第一种方法一样。


对应的modesim仿真


第三种:

//**************************************************************************// *** 名称 : count.v// *** 作者 : 南明离火hk// *** 博客 : https://www.cnblogs.com/jing-shui-liu-shen/// *** 日期 : 2021-07-08// *** 描述 : 计数器模块//**************************************************************************module count (clk,rst_n,led); input clk         ; //输入50M的时钟 input rst_n       ; //输入复位信号 output led         ; //输出ied信号wire add_cnt         ; //定义变量add_cnt的数据类型和数据位宽 wire end_cnt         ; //定义变量end_cnt的数据类型和数据位宽reg [1:0]cnt        ; //定义变量cnt的数据类型和数据位宽//--------------------------------------------------------------- // 计数模块//---------------------------------------------------------------always@(posedge clk or negedge rst_n) begin if(!rst_n) //复位信号拉低 cnt <= 2'b0; //复位时,变量cnt置为0 else if(add_cnt) begin //当add_cnt信号拉高时 if(end_cnt) //当add_cnt信号拉高,end_cnt也拉高时 cnt <= 2'b0; //变量cnt置为0 else //当add_cnt信号拉高,end_cnt拉低时 cnt <= cnt + 2'b1;  //变量cnt+1 endendassign add_cnt = 1; //表示add_cnt信号一直处于拉高状态assign end_cnt = add_cnt && cnt == 4-1; //表示当add_cnt信号拉高,且cnt为4-1时,end_cnt拉高assign led = end_cnt; //表示将end_cnt信号直接连到led信号上,进行输出endmodule 


testbench同第一种方法一样。


对应的modesim仿真


第四种:

rtl可综合电路

//**************************************************************************// *** 名称 : count.v// *** 作者 : 南明离火hk// *** 博客 : https://www.cnblogs.com/jing-shui-liu-shen/// *** 日期 : 2021-07-08// *** 描述 : 计数器模块//**************************************************************************module count (clk,rst_n,led); input clk         ; //输入50M的时钟 input rst_n       ; //输入复位信号 output led         ; //输出ied信号wire add_cnt         ; //定义变量add_cnt的数据类型和数据位宽 wire end_cnt         ; //定义变量end_cnt的数据类型和数据位宽reg [2:0]cnt        ; //定义变量cnt的数据类型和数据位宽//--------------------------------------------------------------- // 计数模块//---------------------------------------------------------------always@(posedge clk or negedge rst_n) begin if(!rst_n) //复位信号拉低 cnt <= 3'b0; //复位时,变量cnt置为0 else if(add_cnt) begin //当add_cnt信号拉高时 if(end_cnt) //当add_cnt信号拉高,end_cnt也拉高时 cnt <= 3'b1; //变量cnt置为1 else //当add_cnt信号拉高,end_cnt拉低时 cnt <= cnt + 3'b1; //变量cnt+1 endendassign add_cnt = 1; //表示add_cnt信号一直处于拉高状态assign end_cnt = add_cnt && cnt == 4; //表示当add_cnt信号拉高,且cnt为4时,end_cnt拉高assign led = end_cnt; //表示将end_cnt信号直接连到led信号上,进行输出endmodule 

testbench同第一种方法一样。


对应的modesim仿真


计数器就讲这些了,最近高清壁纸快要用完了,如果网友们有相关资源,欢迎分享!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭