寫在前面
承接本系列上文。整理一些簡單的根據時序圖編寫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