ASIC设计实例(verilog)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Clk(1KHz) reset
G Y R
module lamp (reset,clk1k, R,G,Y); input clk1k,reset; output reg R,G,Y; reg [9:0] count1; reg [18:0] count2; reg clk1hz;
always @(posedge clk1k) begin //(1kHz->1Hz) if(~reset) begin count1<=0; clk1hz<=0; end else begin if(count1==500) begin count1<=0; clk1hz<=~clk1hz; end else count1<=count1+1; end end
always @(posedge clk) //??(50MHz->1KHz) begin if(~reset) begin count<=0; clk_scan<=0; end else begin if(count==25000) begin count<=0; clk_scan<=~clk_scan; end else count<=count+1; end end
end
ASIC设计实例 ASIC设计实例
设计端口及需求: 设计端口及需求:
D0—D6 Clk(50MHz) reset sel0 sel1 sel2
段值
D0—D6
D6 D5 D4 D3 D2 D1 D0
位选
sel0 sel1 sel2
0 1 2 3
D5 D4 D3wenku.baidu.comD2 D1 D0 位5 位4 位3 位2
always @(posedge clk_scan,negedge reset) //第4位 begin if (~reset) four<=0; else begin if (one==9 && two==9 && three==9 && four==9) four<= 0; else begin if (one==9 && two==9 && three==9) four<=four+1; end end end
always @(posedge clk_scan,negedge reset) //第3位 第 位 begin if (~reset) three<=0; else begin if (one==9 && two==9 && three==9) three<= 0; else begin if (one==9 && two==9) three<=three+1; end end end
always @(posedge clk_scan,negedge reset) //第5位 begin if (~reset) five<=0; else begin if (one==9 && two==9 && three==9 && four==9 && five==9) five<= 0; else begin if (one==9 && two==9 && three==9 && four==9) five<=five+1; end end end
可编程ASIC设计实例
电子科技大学 通信与信息工程学院 郭志勇
附:占空比为70%的100分频器电路
(将clk进行100分频,其中高低电平宽度为7:3)
reg [7:0] count; always @(posedge clk) begin if(~reset) begin count<=0; clk_div100<=1; end else begin if(count==99) begin count<=0; clk_div100<=1; else begin if (count==69) begin count<=count+1; clk_div100<=0; end else count<=count+1; end end end
always @(posedge clk) //产生扫描信号 产生扫描信号 begin if (~reset) sel_temp<=3'b000; else sel_temp<=sel_temp+1; end
always @(posedge clk_scan,negedge reset) //第1位 第 位 begin if (~reset) one<=0; else begin if (one==9) one<=0; else one<=one+1; end end
always @(posedge clk1k , reset) if(~reset) begin count2<=0; G<=1'b0; Y<=1'b0; R<=1'b0; end else begin if(count2==129999) begin count2<=0; end else begin if(count2>=0 && count2<60000) begin G<=1'b1; Y<=1'b0; R<=1'b0; count2<=count2+1; end
`timescale 1ns/1ns module testbench; reg clk,reset; wire [6:0] ledout; wire [2:0] sel; parameter dely=10;
//test module
count test(clk,ledout,sel,reset); always #(dely/2) clk=~clk; initial begin reset=1; clk=0; #dely reset=0; #(dely*8) reset=1; end endmodule
always @(posedge clk) //分频 分频 (1KHz->0.1KHz) begin if(~reset) begin count<=0; clk_scan<=0; end else begin if(count==5) begin count<=0; clk_scan<=~clk_scan; end else count<=count+1; end end
always @(dis_out_temp) //根据扫描值选择当前 always @(sel_temp) 显示的位 //根据扫描值选择当前显示的位 begin begin case (dis_out_temp) sel<= sel_temp; 0:ledout=7'b1111110;//dis_out_temp<=0; case (sel_temp) 1:ledout=7'b0110000;//dis_out_temp<=1; 3'b000:dis_out_temp=one; 2:ledout=7'b1101101;//dis_out_temp<=2; 3:ledout=7'b1111001;//dis_out_temp<=3; 3'b001:dis_out_temp=two; 4:ledout=7'b0110011;//dis_out_temp<=4; 3'b010:dis_out_temp=three; 5:ledout=7'b1011011;//is_out_temp<=5; 3'b011:dis_out_temp=four; 6:ledout=7'b1011111;//dis_out_temp<=6; 3'b100:dis_out_temp=five; 7:ledout=7'b1110000;//dis_out_temp<=7; 3'b101:dis_out_temp=six; 8:ledout=7'b1111111;//dis_out_temp<=8; 3'b110:dis_out_temp=seven; 9:ledout=7'b1111011;//dis_out_temp<=9; 3'b111:dis_out_temp=eight; default:ledout=7'b1111011;//dis_out_temp<=7; default:dis_out_temp=eight; endcase; endcase; end end endmodule
4 5
位1 位0
74LS 138
数码管为 共阴极
设计需要知识点: 设计需要知识点: 1. 如何分频? 如何分频? 2. 数码管动态显示原理及设计代码? 数码管动态显示原理及设计代码? 3. 芯片接口电路时序设计
module display(clk,ledout,sel,reset); input clk; input reset; output reg [6:0] ledout; output reg [2:0] sel; reg [14:0] count; reg clk_scan; reg [2:0] sel_temp;
`timescale 1ns/1ns module testbench; reg clk,reset; wire [6:0] ledout; wire [2:0] sel; parameter dely=10;
//test module
display test(clk,ledout,sel,reset); always #(dely/2) clk=~clk; initial begin reset=1; clk=0; #dely reset=0; #(dely*8) reset=1; end endmodule
always @(posedge clk_scan,negedge reset) //第6位 begin if (~reset) six<=0; else begin if (one==9 && two==9 && three==9 && four==9 && five==9 && six==9) six<= 0; else begin if (one==9 && two==9 && three==9 && four==9 && five==9) six<=six+1; end end end
always @(posedge clk_scan,reset) begin if (~reset) begin sel_temp<=3'b000; end else sel_temp<=sel_temp+1; end
always @(posedge clk) //??????? begin sel<= sel_temp; case (sel_temp) 3'b000:ledout=7'b1111110; 3'b001:ledout=7'b0110000; 3'b010:ledout=7'b1101101; 3'b011:ledout=7'b1111001; 3'b100:ledout=7'b0110011; 3'b101:ledout=7'b1011011; 3'b110:ledout=7'b1011111; 3'b111:ledout=7'b1110000; default:ledout=7'b0000000; endcase; end endmodule
module count(clk,ledout,sel,reset); input clk; input reset; output reg [6:0] ledout; output reg [2:0] sel; reg [14:0] count; reg clk_scan; reg [3:0] dis_out_temp,one,two,three, four,five,six,seven,eight; reg [2:0] sel_temp;
ASIC设计实例 ASIC设计实例
设计一个交通灯信号控制电路。 要求输入为1KHz的时钟和复位信号,输出为 红、绿、黄三个信号(高电平为亮)。 具体描述:复位信号(低电平)有效,红、 绿、黄灯灭;接着进行如下循环:绿灯亮60 秒,黄灯闪烁10秒(闪烁周期是1秒),红 灯亮60秒。
设计端口及需求: 设计端口及需求:
always @(posedge clk_scan,negedge reset) //第2位 第 位 begin if (~reset) two<=0; else begin if (one==9 && two==9) two<= 0; else begin if (one==9) two<=two+1; end end end