Proteus模擬計數器
工程搭建
計數器從0計數到15,當計數到10時觸發led燈
程式碼:
點選檢視程式碼
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2024/11/21 15:41:56
// Design Name:
// Module Name: count_module
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
// Company: xxx
// Engineer: dahunzi
//
// Create Date: 2023/07/01
// Design Name: xxx
// Module Name: xxx
// Project Name: xxx
// Target Devices: xxx
// Tool Versions: VIVADO2017.4
// Description: xxx
//
// Dependencies: xxx
//
// Revision: v0.1
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module count_module#(
parameter P_CNT_WIDTH = 8
)(
input i_clk ,
input i_rst ,
input i_en ,
output [P_CNT_WIDTH-1:0] o_cnt ,
output o_led
);
/***************function**************/
/***************parameter*************/
/***************port******************/
/***************mechine***************/
/***************reg*******************/
reg [P_CNT_WIDTH-1:0] ro_cnt ;
reg ro_led ;
/***************wire******************/
/***************component*************/
/***************assign****************/
assign o_cnt = ro_cnt;
assign o_led = ro_led;
/***************always****************/
always @(posedge i_clk or negedge i_rst) begin
if(!i_rst) begin
ro_cnt <= 8'd0; //大位寬賦值給小位寬允許(自動截位),小位寬賦值給大位寬不允許(軟體不會自動補位)
end
else begin
ro_cnt <= ro_cnt + 1;
end
end
always @(posedge i_clk or negedge i_rst) begin
if(!i_rst) begin //上電覆位初值
ro_led <= 1'd0;
end
else if(ro_cnt == 8'd10) begin
ro_led <= 1'd1;
end
else begin
ro_led <= 1'd0;
end
end
endmodule
這節課沒上板)
他這個程式碼的i_en沒用到
不過程式碼中沒有直接將埠設定為reg,而是另外定義了reg暫存器然後assign給了埠的操作還是值得學習的