初级建模实例_第1页
初级建模实例_第2页
初级建模实例_第3页
初级建模实例_第4页
初级建模实例_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、初级建模实例一、触发器 触发器是逻辑电路中广泛采用的存储信息的元件,种类有R-S触发器、J-K触发器、D触发器、T触发器等。其中D触发器是最常用的。 因为触发器是边沿敏感的元件,所以一般在always语句中敏感列表使用posedge和negedge。1. D触发器data是数据输入端,clk是时钟输入端,q是输出端。dataclkq1module dff (data,clk,q); input data,clk; output q; always(posedge clk) q=data;endmodule22. 带异步复位端的上升沿触发器dataclkqreset reset是异步复位端,当r

2、eset变成0时就执行复位,而不管当前时钟信号如何,即复位行为与时钟不是同步的,所以称为异步复位。3module dff_1 ( data, clk, reset, q ); input data, clk, reset; output q; reg q; always ( posedge clk or negedge reset) if (!reset) q=1b0; else q=data;endmodule43. 带异步置数端的上升沿触发器dataclkqpresetpreset是异步置数端,当preset变为0时,输出q置为1。module dff_2 ( data, clk, pre

3、set, q ); input data, clk, preset; output q; reg q; always ( posedge clk or posedge preset) if (!preset) q=1b1; else q=data;endmodule54. 带同步复位端的上升沿D触发器dataclkqresetreset是同步复位端,与异步复位端不同的是,同步复位行为是在时钟信号控制下进行的,即当某个时刻复位信号生效,但必须等到下一个时钟上升沿时才能执行复位,即复位行为与时钟同步。6module dff_3 ( data, clk, reset, q ); input data

4、, clk, reset; output q; reg q; always ( posedge clk ) if (!reset) q=1b0; else q=data;endmodule75. 带异步复位端和使能端的上升沿D触发器dataclkqresetenen是使能端,当en高电平有效时,才能输出数据。module dff_3 ( data, clk, reset, en, q ); input data, clk, reset, en; output q; reg q; always ( posedge clk or negedge reset ) if (!reset) q=1b0;

5、 else if (en) q=data;endmodule8二、锁存器 和触发器一样,锁存器也是一种具有存储功能的元件,两者不同之处是,锁存器是电平敏感的存储器件,而触发器是边沿敏感的存储器件。所以在always语句的敏感列表中不会使用posedge和negedge。1. 带使能端的锁存器dataenableq 锁存器有一个数据输入端data,数据输出端q和一个使能端enable。当使能端enable有效时,才能把数据输入到锁存器中。9module d_latch ( enable, data, q); input data, enable; output q; reg q; always

6、( enable or data ) if ( enable ) q=data;endmodule102. 可异步选通数据的锁存器dataenableqgate gate是一个异步数据选通端,gate用于选通输入数据,当gate为1时将输入数据与gate做与操作后输出,所以当gate为1是,输出就是输入的数据,否则输出是0。module d_latch ( enable, gate, data, q); input data, enable, gate; output q; reg q; always ( enable or gate or data ) if ( enable ) q=dat

7、a&gate;endmodule11三、编码器 编码器是指能实现用二进制对输入信号进行编码的电路,对于每一种输入信号将输出唯一的二进制代码。 编码器分为一般编码器和优先编码器两种,一般编码器一次只能输入一个信号,优先编码器一次允许输入多个信号。1. 8-3编码器In7In6In5In4In3In2In1In0Out2Out1Out0in7in0是8位数据输入端,out2out0是3位编码输出端。(输入端每次有且只有一个是有效的“1”)12module encoder (in, out)Input 7:0 in;output 2:0 out; reg 2:0 out;always (in) ca

8、se (in) 8b00000001: out=3b000; /in0为1时输出编码000 8b00000010: out=3b001; /in1为1时输出编码001 8b00000100: out=3b010; /in2为1时输出编码010 8b00001000: out=3b011; /in3为1时输出编码011 8b00010000: out=3b100; /in4为1时输出编码100 8b00100000: out=3b101; /in5为1时输出编码101 8b01000000: out=3b110; /in6为1时输出编码110 8b10000000: out=3b111; /in

9、7为1时输出编码111 endcaseendmodule13四、译码器 译码器是指能实现将二进制代码所表示的输入变量翻译出来的电路,对每一种输入代码组合,仅有一个输出信号有效。按应用不同,分为一般译码器和显示译码器两种。1.3-8译码器out7out6out5out4out3out2out1out0in2in1in0in2in0是3位数据输入端,out7out0是8位译码输出端。(输出端每次有且只有一个是有效的“1”)。en是使能端。en14module decoder ( in, out, en ); input en; input 2:0 in; output 7:0 out; reg 7

10、:0 out; always ( en or in) begin if (! en ) out=8b0; else case( in ) 3b000: out=8b00000001; /0 3b001: out=8b00000010; /1 3b010: out=8b00000100; /2 3b011: out=8b00001000; /3 3b100: out=8b00010000; /4 3b101: out=8b00100000; /5 3b110: out=8b01000000; /6 3b111: out=8b10000000; /7 endcaseendmodule15五、 4选

11、1多路数据选择器cdefsout c、d、e、f是4个数据输入端,out是数据输出端,s是选择信号输入端。 分别采用if-else构造和case构造。16用if-else构造module mux (c,d,e,f,s,out)input c,d,e,f;input 1:0 s;output out;reg out;always (c or d or e or f or s)begin if (s=2b00) out=c; /s是00时选通c else if (s=2b01) out=d; /s是01时选通d else if (s=2b10) out=e; /s是10时选通e else out=

12、f; /s是其他值时选通fendendmodule17用case构造module mux (c,d,e,f,s,out)input c,d,e,f;input 1:0 s;output out;reg out;always (c or d or e or f or s)begin case (s) 2b00 : out=c; /00时选通c 2b01 : out=d; /01时选通d 2b10 : out=e; /10时选通e default : out=f; /其他值时选通f endcaseendendmodule18六、计数器 计数器用于对时钟脉冲计数,还用于分频、定时、产生脉冲序列等。

13、计数器分类方法较多。按计数器中触发器是否同时翻转,可以分为同步计数器和异步计数器。按计数的增减,可以分为加计数器、减计数器和可逆计数器。按编码方式,可以分为二进制计数器、2-10进制计数器、循环码计数器。按计数器容量可以分成不同模的计数器。191. 带使能和进位输出的4位加法计数器dintload_dataresetclkqcout4位加法计数器 d是4位置数输入端,int是加法计数使能端,load_data是置数使能端,reset是复位端,clk是时钟输入端。q是4位输出端,cout是进位输出端。该4位加法计数器的模是16。20module counter4_bit (q, cout, d,

14、 int, load_data, reset, clk); output 3:0 q; output cout; input 3:0 d; input int, load_data, reset, clk; reg 3:0 q; reg cout; always (posedge clk) if (reset) begin q=4b0000; cout=0; end else if (load_data) begin q=d; cout=0; end else if (int) if (q=15) begin q=0; cout=1; end else begin q=q+1; cout=0;

15、 end endmodule是异步复位还是同步复位?212. 4分频 module div (clk_in, clk_out, reset); parameter bitsize=2; parameter L=3; input clk_in, reset; output clk_out; reg bitsize:1 count; reg clk_out; always (posedge clk_in) begin if (!reset) count=0; else begin if(countL) count=count+1; else count=0; end clk_out=countbi

16、tsize; endendmodule 对参数L、bitsize进行修改,可得到任意整数倍分频。例如5分频,令参数L=4、bitsize=322七、加法器 加法器是能实现算术运算的逻辑电路,包括半加器和全加器。加法器是构成算术运算的基本单元。半加器 不考虑来自低位的进位而是将两个1位二进制数直接相加,称为半加。sumcaba 和 b是两个1位二进制数输入端,sum是相加结果,c是进位输出。23用行为描述的方法:module half_adder ( a, b, sum, c ); input a, b; output sum,c; assign sum=ab; assign c=a&b;end

17、module用结构描述的方法:module half_adder ( a, b, sum, c ); input a, b; output sum,c; xor n1 (sum, a, b); and n2 ( c, a, b );endmodule242. 全加器 实现两个1位二进制数相加,除考虑本位被加数和加数相加外,还考虑来自低位的进位,这三者相加,称为全加。实现这样全加操作的电路称为全加器。sumcabcincin是进位输入25module full_adder ( a, b, cin, sum, c ); input a, b, cin; output sum,c; reg sum,

18、 c; reg t1, t2, t3; always ( a or b or cin) begin sum=(ab)cin; t1=a&cin; t2=b&cin; t3=a&b; c=( t1|t2 )|t3; endendmodule26八、移位寄存器 移位寄存器是寄存器的一种,除了可以存储数据外,还可以把内部的数据进行移位。移位是指该寄存器内的数据可以再移位脉冲(时钟信号)作用下依次左移或右移。因此移位寄存器不但可以存放数据,还可以实现数据的串-并转换等。串行输入、串行输出的移位寄存器 移位功能可以通过在always语句块内使用for语句描述。zdclkd是串行数据输入端,z是串行数据输

19、出端,clk是移位时钟实现右移操作。27module shift_reg ( d, clk, z ); input d, clk; output z; parameter num_reg=6; reg 1:num_reg q; integer p; always ( negedge clk ) begin for ( p=1; pnum_reg; p=p+1 ) qp+1=qp; /寄存器内数据数据右移一位 q1=d; /右移一位后最高位q1变空,就可以把串行数据D再加载一位到q1 end assign z=qnum_reg; / 最低位qnum_reg在右移时输出到zendmodule 28

20、module dff_1 ( data, clk, reset, preset, q); input data, clk, reset, preset; output q; reg q; always ( posedge clk or negedge reset or posedge preset) if (! reset ) q=1b0; else if ( ! preset ) q=1b1; else q=data;endmodule1. 带异步复位和异步置数的上升沿D触发器presetresetdataclkq292. 带异步复位端的锁存器module d_latch ( data, e

21、n, reset, q); input data, en, reset; output q; reg q; always ( data or en or reset ) if (! reset ) q=1b0; else if (en) q=data;endmodule resetdataenq303. 8-3 优先编码器moduel coder8-3 ( in, out, en ) input 7:0 in; input en; output 2:0 out; reg out; always ( in ) if (! en ) out=3b0; else casex (in) 8b00000

22、001: out=3b000; /in0为1时输出编码000 8b0000001x: out=3b001; /in1为1时输出编码001 8b000001xx: out=3b010; /in2为1时输出编码010 8b00001xxx: out=3b011; /in3为1时输出编码011 8b0001xxxx: out=3b100; /in4为1时输出编码100 8b001xxxxx: out=3b101; /in5为1时输出编码101 8b01xxxxxx: out=3b110; /in6为1时输出编码110 8b1xxxxxxx: out=3b111; /in7为1时输出编码111 end

23、caseendmodule314. 4位串行进位加法器全加器模块:module adder ( a, b, cin, sum, c ); input a, b, cin; output sum,c; reg sum, c; always ( a or b or cin) begin sum=(ab)cin; c=a&b+a&cin+b&cin; endendmodule32module adder4_bit ( a, b, cin, sum, cout ); input 3:0 a,b; input cin; output 3:0 sum; output cout; wire 2:0 c; /

24、实例化4个1位全加器,并用c串连起来。 adder n0 ( a0,b0,c,sum0,c0); adder n1 ( a1,b1,c0,sum1,c1); adder n2 ( a2,b2,c1,sum2,c2); adder n3 ( a3,b3,c2,sum3,cout);endmodule33存储器设计一、ROM 只读存储器ROM是一种具有n个输入、m个输出的组合逻辑电路。只读存储器ROM是一种非易失性存储器,断电不会丢失数据。A0A1A2An-1D0D1Dm-1A0An-1为N个地址输入信号,D0.Dm-1为M个数据输出信号,该存储器有2N个存储单元,每个单元M位。34A2A1A0D3D2D1D0000111000111010101011011011110000011010010110010011110003输入、4输出的ROM的真值表35

温馨提示

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

评论

0/150

提交评论