例程1
源文件
/*目的:实现流水灯
*实现:与单片机类似,用移位法实现
*写法1
*/
module led_run(
Clk, //clk, 表示时钟信号
Reset_n, //reset表示复位, _n表示低电平有效
Led
);
input Clk;
input Reset_n;
output reg [7:0] Led;
reg [24:0]counter; //reg,表示一个D触发器
always@(posedge Clk or negedge Reset_n) //posedge,表示上升沿;negedge,表示下降沿
if(!Reset_n)
counter <= 0;
else if(counter == 25000000 - 1)
counter <= 0;
else
counter <= counter + 1'b1;
always@(posedge Clk or negedge Reset_n)
if(!Reset_n)
Led <= 8'b0000_0001;
else if(counter == 25000000 - 1)
begin
if(Led == 8'b1000_0000)
Led <= 8'b0000_0001;
else
Led <= Led << 1;
end
endmodule
仿真文件
`timescale 1ns / 1ns
module led_run_tb;
reg Clk;
reg Reset_n;
wire [7:0] Led;
led_run(
.Clk(Clk), //clk, 表示时钟信号
.Reset_n(Reset_n), //reset表示复位, _n表示低电平有效
.Led(Led)
);
initial Clk = 1;
always #10 Clk = ~Clk;
initial
begin
Reset_n = 0;
#201;
Reset_n = 1;
#4000000000;
end
endmodule
例程2
源文件,仿真文件与例1相同
/*目的:实现流水灯
*实现:与单片机类似,用移位法实现
*写法2
*/
module led_run(
Clk, //clk, 表示时钟信号
Reset_n, //reset表示复位, _n表示低电平有效
Led
);
input Clk;
input Reset_n;
output reg [7:0] Led;
reg [24:0]counter; //reg,表示一个D触发器
parameter MCNT = 25'd24999999; //parameter:定义参数;MCNT:相当于C语言的变量
always@(posedge Clk or negedge Reset_n) //posedge,表示上升沿;negedge,表示下降沿
if(!Reset_n)
counter <= 0;
else if(counter == MCNT)
counter <= 0;
else
counter <= counter + 1'b1;
always@(posedge Clk or negedge Reset_n)
if(!Reset_n)
Led <= 8'b0000_0001;
else if(counter == MCNT)
begin
if(Led == 8'b1000_0000)
Led <= 8'b0000_0001;
else
Led <= Led << 1;
end