写在前面
整理一些简单的根据时序图编写Verilog代码的实例,帮助新手学习,老手巩固。每次更新两题,根据难度会挑选一些进行讲解。
题目 01
题目 01 答案
always @(posedge clk or negedge rst_n)begin if(!rst_n)begin cnt <= 0; end else if(add_cnt)begin if(end_cnt) cnt <= 0; else cnt <= cnt + 1; end end assign add_cnt = dout == 1; assign end_cnt = add_cnt && cnt== 5-1; always @(posedge clk or negedge rst_n)begin if(rst_n == 1'b0)begin dout<= 0; end else if(en==1)begin dout<= 1; end else if(end_cnt==1)begin dout<= 0; end end
题目 02
题目 02 答案
本题和01类似,只不过需要切换计数器的时间
always @(posedge clk or negedge rst_n)begin if(!rst_n)begin cnt <= 0; end else if(add_cnt)begin if(end_cnt) cnt <= 0; else cnt <= cnt + 1; end end assign add_cnt = dout == 1; assign end_cnt = add_cnt && cnt== x-1; always @(posedge clk or negedge rst_n)begin if(rst_n == 1'b0)begin dout<= 0; end else if(en1==1||en2==1)begin dout<= 1; end else if(end_cnt==1)begin dout<= 0; end end always @(posedge clk or negedge rst_n)begin if(rst_n == 1'b0)begin x<=0; end else if (en1==1)begin x<=2; end else if(en2==1)begin x<=4; end end