求一个verilog程序 要串行输出的

求一个verilog程序 要串行输出的,第1张

Module sequence_gen ( reset_n ,clk ,baud_sel,mode,led_8,out)

Input wire reset_n

Input wire clk

Input wire baud_sel //输出速率选择,李茄1为高速(哪悉察每个时钟输出一个)0为低速(16个时钟输出一个)

Input wire[2:0] mode //模式选择输入

Output reg [6:0] led_8 //7未共阴级数码管显示输出

Output wire out//a序列串行输出

Reg [3:0] div //输出速率分频

Reg [12:0] out_reg //序列数值存储

Reg [3:0] out_cnt //序列串行输出计数器。每次序列数值都在计数器为11时更新即前一个序列数串行输出完毕

//输出速率

Always@(posedge clk or negedge reset_n )

Begin

If(!reset_n)

Div <=‘h0

Else if(baud_sel)

Div<=‘hf

Else

Div<=div+’h1

End

//序列串行输出计数器,向下递减

//输出序列数据产生

Always@(posedge clk or negedge reset_n )

Begin

If(!reset_n)

out_cnt <=‘hc

else if(Div=’hf)

out_cnt<= out_cnt –‘h1

else

out_cnt<= out_cnt

end

//输出序列数据产生

Always@(posedge clk or negedge reset_n )

Begin

If(!reset_n)

out_reg <= ‘h0

else if(out_cnt==’hc)

Case(mode)

3’h0 : out_reg<= ‘h191c

3’h1 : out_reg<= ‘h1922

3’h2 : out_reg<= ‘h1949

3’h3 : out_reg<= ‘h196d

3’h4 : out_reg<= ‘h1992

3’h5 : out_reg<= ‘h19b6

3’陆山h6 : out_reg<= ‘h19db

3’h7 : out_reg<=‘h19ff

Endcase

Else

Out_reg<={1’h0, out_reg[12:1]} //out_reg 的低位先串行输出

End

Assign out =out_reg[0]

// 数码管显示模式

Always@(posedge clk or negedge reset_n )

Begin

If(!reset_n)

led_8<= ‘h0 //复位时关闭数码管显示

else if(out_cnt==’hc) //一个序列数据输出完毕时更新数码管显示

Case(mode)

3’h0 : led_8 <= ‘h3f

3’h1 : led_8 <= ‘h06

3’h2 : led_8 <= ‘h5b

3’h3 : led_8 <= ‘h4f

3’h4 : led_8 <= ‘h66

3’h5 : led_8 <= ‘h6b

3’h6 : led_8 <= ‘h7d

3’h7 : led_8<= ‘h07

Endcase

Else

led_8 <=led_8

End

Endmodule

这个一个很简单的用verilog实现的四个LED轮流闪的程序。

实橘纤悔现竖团的原理是将输入的高圆正频时钟clk做2500000分频,分成肉眼能识别的频率,然后驱动四个LED灯依次闪灯。

代码输入输出好几个管脚都么有使用,建议去掉。有其他问题随时提问,欢迎采纳。

举个简单点的例子,如下。

设计一个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://outofmemory.cn/yw/12472193.html

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

发表评论

登录后才能评论

评论列表(0条)

保存