写在前面
承接本系列上文。整理一些简单的根据时序图编写Verilog代码的实例,帮助新手学习,老手巩固。每次更新两题,根据难度会挑选一些进行讲解。
本次两个题目相似,注意计时器的计数停止位数即可
题目 03
题目 03答案
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 = flag == 1; assign end_cnt = add_cnt && cnt== 5-1; assign high_flag = add_cnt && cnt== 4-1; always @(posedge clk or negedge rst_n)begin if(rst_n == 1'b0)begin flag<= 0; end else if(en==1)begin flag<= 1; end else if(end_cnt==1)begin flag<= 0; end end always @(posedge clk or negedge rst_n)begin if(rst_n == 1'b0)begin dout<= 0; end else if(high_flag==1)begin dout<= 1; end else if(end_cnt==1)begin dout<= 0; end end
题目 04
题目 04答案
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 = flag == 1; assign end_cnt = add_cnt && cnt== 6-1; assign high_flag = add_cnt && cnt== 3-1; always @(posedge clk or negedge rst_n)begin if(rst_n == 1'b0)begin flag<= 0; end else if(en==1)begin flag<= 1; end else if(end_cnt==1)begin flag<= 0; end end always @(posedge clk or negedge rst_n)begin if(rst_n == 1'b0)begin dout<= 0; end else if(high_flag==1)begin dout<= 1; end else if(end_cnt==1)begin dout<= 0; end end