
input rst
input [7:0] data_in
output [7:0] data_out
reg [7:0] data
wire data_out
always @ (posedge clk or negedge rst)
if (~rst)
data <= data_in
else
data <= data<<1// 此处先移高位,后低位; 如果先低后高改为:data <= data>>1
assign data_out = data[7]// 此处先移高位,后低位; 如果先低后高改为:data[0]
module test_cnt5(clk,reset,car,out)input clk,reset//reset为异步复位信号
output car,out//car为进位信号
reg[2:0]cnt//cnt为计数器
reg car
wire[2:0]out
assign out=cnt
always@(posedge clk or negedge reset)
begin
if(!reset)begin
cnt<=3'b000
car<=0
end
else begin
if(cnt==3'b100)begin
car<=3'b001
cnt<=3'b000
end
else begin
cnt<=cnt+3'b001
car<=3'b000
end
end
end
endmodule
举个简单点的例子,如下。
设计一个4bit的计数器,在记到最大值时输出一个信号
module counter_16 ( input clk, input rst_n, input cnt_in ,output reg cnt_out )
reg [3:0] cnt
always @ (posedge clk or negedge rst_n) begin
if (~rst_n) cnt <= 4'b0
else if (cnt_in) cnt <= cnt +1'b1
else cnt <= cnt
end
always @ (posedge clk or negedge rst_n) begin
if (~rst_n) cnt_out <= 1'b0
else if (cnt_in &&cnt == 4'b1111) cnt_out <= 1'b1
else cnt_out <= 1'b0
end
endmodule
这实际上设计了一个16进制计数器其中的一位,你可以例化多个相同模块,将低位的cnt_out连接到高位的cnt_in,级联成一个任意位数的16进制计数器。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)