verilog HDL基础程序

时间:2025-04-26

1

涉及到需要时间的并且在不同的时间执行程序时就要用到分频计数器至于需要分频多少看需要执行多少次,也就是需要用到的时间有多少次。

3-8 译码器

//学习3 8译码器的原理,

//拨码开关的 1 2 3作为输入

//本实验采用拨码开关来作为输入,LED作为状态显示

//当然如果你的学习板没有拨码开关,可以用key1 key2 key3 作为数据输入。

module decoder_38(out,key_in);

output[7:0] out; //3 8译码器输出有8钟状态,所以要8个LED灯。

input[2:0] key_in; //(1 2 3)key1 key2 key3 作为数据输入

reg[7:0] out;

always @(key_in)

begin

case(key_in)

3'd0: out=8'b11111110; //LED作为状态显示,低电平有效

3'd1: out=8'b11111101;

3'd2: out=8'b11111011;

3'd3: out=8'b11110111;

3'd4: out=8'b11101111;

3'd5: out=8'b11011111;

3'd6: out=8'b10111111;

3'd7: out=8'b01111111;

endcase

end

endmodule

1位数码管动态显示

//一位数码管试验

//利用分频计数器得到数码管,效果

module SMG_LED (clk_50M,rst,led_bit,dataout);

input clk_50M,rst; //系统时钟50M输入 从12脚输入。

output [7:0] dataout; //我们这里用数码管,

output led_bit; //一位数码管的位选择

reg [7:0] dataout;

reg led_bit;

reg [27:0] count; //分频计数器

//分频计数器

always @ ( posedge clk_50M )

begin

count<=count+1; //计数器自加

end

always @ ( posedge clk_50M or negedge rst)

begin

led_bit <= 'b0; //是数码管的位选择处于导通状态

case ( count[27:24] )

1

// case ( count[27:24] )这一句希望初学者看明白,

// 也是分频的关键

// 在数码管上面显示0到F

0: dataout<=8'b11000000; //0

1: dataout<=8'b11111001;

2: dataout<=8'b10100100;

3: dataout<=8'b10110000;

4: dataout<=8'b10011001;

5: dataout<=8'b10010010;

6: dataout<=8'b10000010;

7: dataout<=8'b11111000;

8: dataout<=8'b10000000;

9: dataout<=8'b10010000;

10:dataout<=8'b10001000;

11:dataout<=8'b10000011;

12:dataout<=8'b11000110;

13:dataout<=8'b10100001;

14:dataout<=8'b10000110;

15:dataout<=8'b10001110; //f

endcase

end

endmodule

7段数码管静态显示

//本实验就是学习单个数码管的显示

module SMG_LED (clk_50M,led_bit,dataout);

input clk_50M ; //系统时钟50M输入 从12脚输入。

output [7:0] dataout; //我们这里用数码管,

output led_bit; //一位数码管的位选择

reg [7:0] dataout;

reg led_bit;

always @ ( posedge clk_50M )

begin

led_bit <= 'b0; //是数码管的位选择处于导通状态

dataout<=8'b11000000; //修改7段码,可以显示不同的字符

//本实验初始是在数码管显示0

end

数码管静态显示0到7

//7段数码管测试实验:以动态扫描方式在8位数码管

//“同时”显示0--7

//实验的目的是向用户介绍多个数码管动态显示的方法。

//动态显示的方法是,按一定的频率轮流向各个数码管的COM端送出低电平

//,同时送出对应的数据给各段

module led_0_7 (clk,rst,dataout,en);

input clk,rst; //系统时钟50M输入 从12脚输入。

1

output[7:0] dataout; //数码管的段码输出

output[7:0] en; //数码管的位选使能输出

reg[7:0] dataout;

reg[7:0] en;

reg[15:0] cnt_scan;//扫描频率计数器

reg[4:0] dataout_buf;

always@(posedge clk or negedge rst)

begin

if(!rst) begin

cnt_scan<=0;

end

else begin

cnt_scan<=cnt_scan+1;

end

end

always @(cnt_scan)

begin

case(cnt_scan[15:13])

3'b000 :

en = 8'b1111_1110;

3'b001 :

en = 8'b1111_1101;

3'b010 :

en = 8'b1111_1011;

3'b011 :

en = 8'b1111_0111;

3'b100 :

en = 8'b1110_1111;

3'b101 :

en = 8'b1101_1111;

3'b110 :

en = 8'b1011_1111;

3'b111 :

en = 8'b0111_1111;

default :

en = 8'b1111_1110;

endcase

end

always@(en) //对应COM信号给出各段数据

begin

case(en)

8'b1111_1110:

dataout_buf=0;

8'b1111_1101:

1

dataout_buf=1;

8'b1111_1011:

dataout_buf=2;

8'b1111_0111:

dataout_buf=3;

8'b1110_1111:

dataout_buf=4;

8'b1101_1111:

dataout_buf=5;

8'b1011_1111:

dataout_buf=6;

8'b0111_1111:

dataout_buf=7;

default:

dataout_buf=8;

endcase

end

always@(dataout_buf)

begin

case(dataout_buf)

4'b0000:

dataout=8'b1100_0000;

4'b0001:

dataout=8'b1111_1001;

4'b0010:

dataout=8'b1010_0100;

4'b0011:

dataout=8'b1011_0000;

4'b0100:

dataout=8'b1001_1001;

4'b0101:

dataout=8'b1001_0010;

4'b0110:

dataout=8'b1000_0010;

4'b0111:

dataout=8'b1111_1000;

4'b1000:

dataout=8'b1000_0000;

4'b1001:

dataout=8'b1001_1000;

4'b1010:

dataout=8'b1000_1000;

4'b1011:

dataout=8'b1000_0011;

1

dataout=8'b1100_0110;

4'b1101:

dataout=8'b1010_0001;

4'b1110:

dataout=8'b1000_0110;

4'b1111:

dataout=8'b1000_1110;

endcase

end

endmodule

8位优先编码器

//学习编码器的原理

//优先编码器,拨码开关来作为输入,结果由数码管显示

module encode(a,c,en);

input[8:1] …… 此处隐藏:12218字,全部文档内容请下载后查看。喜欢就下载吧 ……

verilog HDL基础程序.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219