verilog HDL基础程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

verilog HDL基础程序
veriloghdl基础程序
对于需要时间且在不同时间执行程序的程序,将使用频分计数器。

至于分频,则取决于需要执行多少次,即需要使用多少次。

3-8译码器
//学习38解码器的原理,拨号开关的/123作为输入
//本实验采用拨码开关来作为输入,led作为状态显示
//当然,如果您的学习板没有拨号开关,您可以使用key1key2key3作为数据输入。

模块编码器38(输出,输入);
output[7:0]out;//38译码器输出有8钟状态,所以要8个led灯。

input[2:0]key_in;//(123)key1key2key3作为数据输入reg[7:0]out;
总是开始
case(key_in)
3'd0:out=8'b111110;//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'B1011111;3'd7:out=8'b01111111;结束
endmodule
1位数码管动态显示//1位数码管测试
//利用分频计数器得到数码管,效果
模块指示灯(时钟50米,rst,指示灯位,数据输出);
inputclk_50m,rst;//系统时钟50m输入从12脚输入。

output[7:0]dataout;//我们这里用数码管,outputled_bit;//一位数码管的位选择reg[7:0]dataout;regled_bit;
注册[27:0]计数;//频分计数器//频分计数器
always@(posedgeclk_50m)begin
计数<=计数+1;//反自增端
always@(posedgeclk_50mornegedgerst)begin
led_uu位<='b0;//是的,数码管的位选择处于on状态(计数[27:24])
//case(count[27:24])这一句希望初学者看明白,//也是分频的关键
//在数码管上显示0到F0:dataout<=8'b11000000//01:dataout<=8'b11111001;2:数据输出<=8'B10100;3:数据输出<=8'B1011000;4:数据输出<=8'b10011001;
5:dataout<=8'B10010;6:dataout<=8'b10000010;7:dataout<=8'b11111000;8:数据输出<=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;//芬德凯森德
endmodule
七段数码管静态显示器
//本实验就是学习单个数码管的显示
模块开关led(时钟50米,led位,数据输出);
inputclk_50m;//系统时钟50m输入从12脚输入。

output[7:0]dataout;//我们这里用数码管,outputled_bit;//一位数码管的位选择reg[7:0]dataout;regled_bit;
总是开始
led_bit<='b0;//是数码管的位选择处于导通状态
数据输出<=8'b11000000;//修改7段代码以显示不同的字符。

//0end在本实验开始时显示在数码管上
数码管静态显示0到7
//7段数码管测试实验:在动态扫描模式下,以8位数码管/“同时”显示0-7
//实验的目的是向用户介绍多个数码管动态显示的方法。

输入时钟,rst;//系统时钟输入来自引脚12。

output[7:0]dataout;//数码管的段码输出
输出[7:0]en;//位选择启用数码管reg[7:0]数据输出的输出;reg[7:0]en;
reg[15:0]cnt_scan;//扫描频率计数器reg[4:0]dataout_buf;
始终@(posedgelckornegerst)开始扫描(!rst)开始扫描<=0;EndelBeginnt_uu 扫描<=cnt_uuu扫描+1;恩登
always@(cnt_scan)begin
病例(cnt_扫描[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;违约:
en=8'b1111_1110;endcaseend
dataout_buf=1;8'b1111_1011:dataout_1011=2;8'b1111_u0111:dataout_ubuf=3;
8'b1110_u1111:dataout_ubuf=4;8'b1101_u1111:dataout_ubuf=5;
8'b1011_u1111:dataout_ubuf=6;8'b0111_1111:dataout_buf=7;默认值:
dataout_buf=8;结束
always@(dataout_buf)begincase(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_000 0;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:d ataout=8'b1001_1000;4'b1010:dataout=8'b1000_1000;4'b1011:dataout=8'b1000_0011;
4'b1100:dataout=8'b1100_0110;4'b1101:dataout=8'b1010_u0001;
4'b1110:dataout=8'b1000_u0110;4'b1111:dataout=8'b1000_1110;结束
endmodule
8位优先编码器//学习编码器原理
//优先编码器,拨码开关来作为输入,结果由数码管显示moduleencode(a,c,en);
输入[8:1]a;//通过键盘输入数据输出[7:0]C//结果通过数码管reg[7:0]C显示;输
出[7:0]en;reg[3:0]c_tmp;整合;赋值=0;始终@(a)beginc_tmp=0;对于(i=1;i<9;i=i+1)beginif(a[i])c_tmp=i;恩登
always@(c_tmp)begin
//以下是由7个段代码显示的段代码案例(c_tmp)
4'b0000:c=8'b11000000//04'b0001:c=8'b11111001;//14'b0010:c=8'b10100100;4'b0011:c=8'B1011000;4'b0100:c=8'b10011001;。

相关文档
最新文档