verilog8位并行输入串行输出移位寄存器程序

verilog8位并行输入串行输出移位寄存器程序,第1张

input clk

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进制计数器。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11662943.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存