常见数字电路设计_第1页
常见数字电路设计_第2页
常见数字电路设计_第3页
常见数字电路设计_第4页
常见数字电路设计_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第一部分 数字系统设计概论第二部分 CPLD/FPGA第三部分第三部分 Verilog HDL第四部分 上机实验 一、初识 Verilog HDL 二、Verilog HDL 语法基础 三、Verilog HDL 行为语句 四、数字电路Verilog 设计四、数字电路四、数字电路Verilog Verilog 设计设计u组合逻辑电路设计u时序逻辑电路设计u多层次结构电路设计目标:写写简单电路简单电路读读较为复杂电路较为复杂电路掌握掌握多层次结构电路设计基本方法多层次结构电路设计基本方法 例例1:一、组合逻辑电路设计一、组合逻辑电路设计三种设计风格:p结构描述(调用门元件)p数据流描述(assi

2、gn)p行为描述(always 过程语句) 例例1:一、组合逻辑电路设计一、组合逻辑电路设计notandor元件名称元件名称 实例化名称(输出端口,输入端口)实例化名称(输出端口,输入端口) module mux4_1a (out, in1, in2, in3,in4,ct1,ct2); input in1, in2, in3,in4,ct1,ct2; output out; endmodulenot (nct1,ct1),(nct2,ct2);and (w, in1, nct1,nct2) ,(x, in2, nct1,ct2 ), (y, in3, ct1,nct2), (z, in4,

3、ct1,ct2 );or (out, w,x,y,z); 结构描述:结构描述:写写 例例1:一、组合逻辑电路设计一、组合逻辑电路设计out= ( in1& ct1 & ct2) ( in2 & ct1 & ct2 ) ( in3 & ct1 & ct2) ( in4 & ct1 & ct2 ) 数据流描述数据流描述 module mux4_1 (out, in1, in2, in3,in4,ct1,ct2); input in1, in2, in3,in4,ct1,ct2; output out; assign out= ( in1& ct1 & ct2) ( in2 & ct1 & ct2

4、) ( in3 & ct1 & ct2) ( in4 & ct1 & ct2 ); endmodule写写 行为描述行为描述 module mux4_1b (out, in1, in2, in3,in4,ct1,ct2); input in1, in2, in3, in4,ct1,ct2; output out; reg out; always( ) out= ( in1& ct1 & ct2) ( in2 & ct1 & ct2 ) ( in3 & ct1 & ct2) ( in4 & ct1 & ct2 ); endmodulein1 or in2 or in3 or in4 or ct1

5、 or ct2写写 例例2:三态门:三态门(2)数据流描述)数据流描述(3)行为描述)行为描述(1)结构描述)结构描述assign out=en ? in: bz;reg out;beginalways (en or in)out=en ? in: bz;endbufif1 b1(out, in, en);写写 例例3:设计一个:设计一个3线线-8线译码器,输出低电平有效线译码器,输出低电平有效2 case(in) 3b000: out=8b11111110; 3b001: out=8b11111101; 3b010: out=8b11111011; 3b011: out=8b11110111

6、; 3b100: out=8b11101111; 3b101: out=8b11011111; 3b110: out=8b10111111; 3b111: out=8b01111111; default: out =8 bx; endcasealways (in) begin endreg 7:0 out;module decoder_38 (out,in); output 7:0 out; input 2:0 in;endmodule写写总线名称总线名称 例例4:设计一个:设计一个3线线-8线优先编码器,输入高电平线优先编码器,输入高电平有效,输出为原码有效,输出为原码 always (a

7、or b or c or d or e or f or g or h) begin if(h) outcode=3b111; else if(g) outcode=3b110; else if(f) outcode=3b101; else if(e) outcode=3b100; else if(d) outcode=3b011; else if(c) outcode=3b010; else if(b) outcode=3b001; else if(a) outcode=3b000; else outcode=3bzzz; end reg 2:0 outcode;写写练习1: 采用Verilo

8、g HDL case 语句对半加器进行行为描述module halfadder(A,B,S,C); input A,B; output S,C; reg S,C; always (A or B) begin case (A,B) 2b00: C,S=2b00; 2b01: C,S=2b01; 2b10: C,S=2b01; 2b11: C,S=2b10; endcase end endmodule练习2:(作业) 设计一个BCD码七段数码显示译码器例例5 5:说明如下电路的功能:说明如下电路的功能module voter7(pass,vote); output pass; input6:0 v

9、ote; integer i;reg pass; reg2:0 sum; always (vote) begin sum=0; for(i=0;i=6;i=i+1) if(votei) sum=sum+1; if(sum2) pass=1; else pass=0; endendmodule七人投票表决器七人投票表决器读读p 组合逻辑电路设计小结组合逻辑电路设计小结 1. 在Verilog HDL中,描述简单的组合逻辑通常使用assign结构 2. 一般用always块实现较复杂的组合逻辑电路例例1:设计一个同步低电平清零、上升沿触发的:设计一个同步低电平清零、上升沿触发的D触发器触发器二、时

10、序电路二、时序电路Verilog Verilog 设计设计DFFCLKdqqnresetmodule DFF(q,qn,d,clk, reset); output q,qn; input d,clk, reset; reg q,qn; always (posedge clk ) begin if(!reset) begin q=0; qn=1; end else begin q=d; qn=d; end endendmodule写写例例2:设计一个下降沿触发的:设计一个下降沿触发的JK触发器触发器 reg Q; always (negedge CLK ) begin case(J,K) 2b0

11、0: Q=Q; 2b01:Q=1b0; 2b10:Q=1b1; 2b11:Q=Q; endcase end写写练习练习1:设计一个上升沿触发的:设计一个上升沿触发的8位数据寄存器位数据寄存器module reg8(out_data,in_data,clk,clr); output7:0 out_data; input7:0 in_data; input clk,clr; reg7:0 out_data; always (posedge clk) beginout_data=in_data; endendmodule 练习2(作业)把上例变成带异步低电平有效清零端的数据寄存器例3:分析如下电路的

12、功能 module shifter(clk,clr,dout,load,d); input7:0d; output7:0 dout; reg7:0 dout; reg din; always (posedge clk) begin if(clr) dout=8b0; else if(load) dout=d; else begin din=dout7; dout=dout1; dout0=din; end end endmodule读读同步清零端同步清零端同步置数端同步置数端循环左移寄存器循环左移寄存器module updown_count(d,clk,clear,load,up_down,q

13、d); input 3:0 d; input clk, clear,load,up_down; output 3:0 qd; reg3:0 qd; always (posedge clk) begin if(!clear) qd=4h00; else if(load) qd=d; else if(up_dwon) qd=qd+1; else qd=qd-1; end endmodule练习1:分析如下电路的功能(作业)p 时序电路设计小结时序电路设计小结 1.通常使用always (posedge clk)或 (negedge clk)块来描述时序逻辑; 2.在always 语句里面可以包括:

14、赋值语句,条件语句,循环语句;各种语句之间可以配合使用.三、多层次结构电路设计三、多层次结构电路设计 问题的提出:利用半加器构造全加器例1:问题提出:CBAmmmmSout7421 输输 入入输输 出出 A B C A B C Cout Sout Cout Sout0 0 00 0 10 1 00 1 11 0 01 0 11 1 01 1 10010100110010111CBABAmmmmCout)(7653全加器module HA(A,B,S,C); input A,B; output S,C; assign s=AB, C=A&B;endmodule C=ABS=A B半加器:由半加器

15、构成全加器:h1h2ABCSoutCout 模块的调用(重点)模块的调用(重点) 调用格式:调用格式:模块名称模块名称 实例名(信号端口)实例名(信号端口) 信号端口可以通过位置或名称关联;但是关联方式不能够混合使用。 位置关联位置关联: (端口(端口1,端口端口2,端口端口3,. );); 名称关联名称关联: (.被调用模块端口名称被调用模块端口名称1(端口名称端口名称1), .模块模块端口名称端口名称2(端口名称端口名称2), .););1位全加器的编程:module FA(A,B,C,Sout,Cout); input A,B,C; output Sout,Cout; HA h1(A,B

16、, S1,C1); /通过位置相关连 HA h2(.A(S1), .B(C) , .S(Sout), .C(C2); /通过名称相关连 or O(Cout ,C1,C2);endmoduleh1h2ABCSoutCout练习1:分别说出下面两个模块的作用。 module trist (out1,in1,enable1); output out1; input in1, enable1; mytri trist1(out1,in1,enable1); endmodule module mytri(out,in,enable); output out; input in, enable; assi

17、gn out = enable? In : bz; endmodule例例2 2:设计一个:设计一个8 8位的简易累加器位的简易累加器ACCACC第第1步:进行层次设计规划步:进行层次设计规划 第第2步:进行底层设计步:进行底层设计 第第3步:构建顶层模块步:构建顶层模块加法器模块设计:加法器模块设计:module add8(sum,cout,a,b,cin);output7:0 sum; output cout; input7:0a,b; input cin;assign cout,sum=a+b+cin;endmodule寄存器模块设计:寄存器模块设计:module reg8(qout,in,clk,clr);output7:0 qout;input7:0 in;input clk,clr;reg7:0 qout;always (posedge clk or posedge clr)begin if(clr) qout=0; else qout=in;endendmodule 顶层模块设计:顶层模块设计:module acc(accout,c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论