ImageVerifierCode 换一换
格式:DOCX , 页数:84 ,大小:33.53KB ,
资源ID:9315658      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9315658.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(国外经典Verilog代码.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

国外经典Verilog代码.docx

1、国外经典Verilog代码/* * * Examples from The Verilog Hardware Description Language, * * by D.E. Thomas and P.R. Moorby * * */Example 1.2. NAND Latch To Be Simulated.module ffNand; wire q, qBar; reg preset, clear; nand #1 g1 (q, qBar, preset), g2 (qBar, q, clear); initial begin / two slashes introduce a sin

2、gle line comment $monitor ($time, Preset = %b clear = %b q = %b qBar = %b, preset, clear, q, qBar); /waveform for simulating the nand flip flop #10 preset = 0; clear = 1; #10 preset = 1; #10 clear = 0; #10 clear = 1; #10 $finish; endendmodule/Example 1.4. A 16-Bit Counter.module m16 (value, clock, f

3、ifteen, altFifteen); output 3:0 value; output fifteen, altFifteen; input clock; dEdgeFF a (value0, clock, value0), b (value1, clock, value1 value0), c (value2, clock, value2 &value1:0), d (value3, clock, value3 &value2:0); assign fifteen = value0 & value1 & value2 & value3; assign altFifteen = &valu

4、e;endmodule/Example 1.5. A D-Type Edge-Triggered Flip Flop.module dEdgeFF (q, clock, data); output q; reg q; input clock, data; initial q = 0; always (negedge clock) #10 q = data;endmodule/Example 1.6. A Clock For the Counter.module m555 (clock); output clock; reg clock; initial #5 clock = 1; always

5、 #50 clock = clock;endmodule/Example 1.7. The Top-Level Module of the Counter.module board; wire 3:0 count; wire clock, f, af; m16 counter (count, clock, f, af); m555 clockGen (clock); always (posedge clock) $display ($time,count=%d, f=%d, af=%d, count, f, af);endmodule/Example 1.8. The Counter Modu

6、le Described With Behavioral Statements.module m16Behav (value, clock, fifteen, altFifteen); output 3:0 value; reg 3:0 value; output fifteen, altFifteen; reg fifteen, altFifteen; input clock; initial value = 0; always begin (negedge clock) #10 value = value + 1; if (value = 15) begin altFifteen = 1;

7、 fifteen = 1; end else begin altFifteen = 0; fifteen = 0; end endendmodule/Example 1.9. Top Level of the Fibonacci Number Generator.module top(); wire flag, numProduced, numConsumed; wire 15:0 number, numberOut; nandLatch ready (flag, , numConsumed, numProduced); numberGen ng (number, numProduced, f

8、lag); fibNumberGen fng (number, flag, numConsumed, numberOut);endmodule/Example 1.10. A NAND Latch.module nandLatch (q, qBar, set, reset); output q, qBar; input set, reset; nand #2 (q, qBar, set), (qBar, q, reset);endmodule/Example 1.11. The Seed-Number Generator.module numberGen (number, numProduce

9、d, flag); output 15:0 number; output numProduced; input flag; reg numProduced; reg 15:0 number; initial begin number = 3; numProduced = 1; end always begin wait (flag = 1) #100 number = number + 1; numProduced = 0; #10 numProduced = 1; endendmodule/Example 1.12. The Fibonacci Number Generator Module

10、.module fibNumberGen (startingValue, flag, numConsumed, fibNum); input 15:0 startingValue; input flag; output numConsumed; output 15:0 fibNum; reg numConsumed; reg 15:0 myValue; reg 15:0 fibNum; initial begin numConsumed = 0; #10 numConsumed = 1; $monitor ($time, fibNum=%d, startingValue=%d, fibNum,

11、 startingValue); end always begin wait (flag = 0) myValue = startingValue; numConsumed = 0; #10 numConsumed = 1; /signal ready for input for (fibNum = 0; myValue != 0; myValue = myValue - 1) fibNum = fibNum + myValue; $display (%d, fibNum=%d, $time, fibNum); endendmodule/Example 2.1. A Divide Module

12、.module divide (ddInput, dvInput, quotient, go, done); parameter DvLen = 15, DdLen = 31, QLen = 15, HiDdMin = 16; input DdLen:0 ddInput; input DvLen:0 dvInput; output QLen:0 quotient; input go; output done; reg DdLen:0 dividend; reg done; reg QLen:0 quotient; reg negDivisor, negDividend; reg DvLen:0

13、 divisor; always begin done = 0; wait (go); divisor = dvInput; dividend = ddInput; quotient = 0; if (divisor) begin negDivisor = divisorDvLen; if (negDivisor) divisor = - divisor; negDividend = dividendDdLen; if (negDividend) dividend = - dividend; repeat (DvLen + 1) begin quotient = quotient 1; div

14、idend = dividend 1; dividendDdLen:HiDdMin = dividendDdLen:HiDdMin - divisor; if (! dividend DdLen) quotient = quotient + 1; else dividendDdLen:HiDdMin = dividendDdLen:HiDdMin + divisor; end if (negDivisor != negDividend) quotient = - quotient; end done = 1; wait (go); endendmodule/Example 2.5. The M

15、ark-1 Processor With If-Else-If.module mark1; reg 31:0 m 0:8191; / 8192 x 32 bit memory reg 12:0 pc; / 13 bit program counter reg 31:0 acc; / 32 bit accumulator reg 15:0 ir; / 16 bit instruction register always begin ir = m pc; /fetch an instruction if (ir15:13 = 3b000) /begin decoding pc = m ir 12:

16、0; /and executing else if (ir15:13 = 3b001) pc = pc + m ir 12:0; else if (ir15:13 = 3b010) acc = -m ir 12:0; else if (ir15:13 = 3b011) m ir 12:0 = acc; else if (ir15:13 = 3b101) | (ir15:13 = 3b100) acc = acc - m ir 12:0; else if (ir15:13 = 3b110) if (acc 0) pc = pc + 1; #1 pc = pc + 1; /increment pr

17、ogram counter and time end endmodule/Example 2.6. The Mark-1 With a Case Statement.module mark1Case; reg 31:0 m 0:8191; / 8192 x 32 bit memory reg 12:0 pc; / 13 bit program counter reg 31:0 acc; / 32 bit accumulator reg 15:0 ir; / 16 bit instruction register always begin ir = m pc; case (ir 15:13) 3

18、b000 : pc = m ir 12:0; 3b001 : pc = pc + m ir 12:0; 3b010 : acc = -m ir 12:0; 3b011 : m ir 12:0 = acc; 3b100, 3b101 : acc = acc - m ir 12:0; 3b110 : if (acc 0) pc = pc + 1; endcase pc = pc + 1; endendmodule/Example 2.8. The Mark-1 With a Multiply Instruction.module mark1Mult; reg 31:0 m 0:8191; / 81

19、92 x 32 bit memory reg 12:0 pc; / 13 bit program counter reg 31:0 acc; / 32 bit accumulator reg 15:0 ir; / 16 bit instruction register always begin ir = m pc; case (ir 15:13) 3b000 : pc = m ir 12:0; 3b001 : pc = pc + m ir 12:0; 3b010 : acc = -m ir 12:0; 3b011 : m ir 12:0 = acc; 3b100, 3b101 : acc =

20、acc - m ir 12:0; 3b110 : if (acc 0) pc = pc + 1; 3b111 : acc = acc * m ir 12:0; /multiply endcase #1 pc = pc + 1; endendmodule/Example 2.9. A Task Specification.module mark1Task; reg 31:0 m 0:8191; / 8192 x 32 bit memory reg 12:0 pc; / 13 bit program counter reg 31:0 acc; / 32 bit accumulator reg 15

21、:0 ir; / 16 bit instruction register always begin ir = m pc; case (ir 15:13) 3b000 : pc = m ir 12:0; 3b001 : pc = pc + m ir 12:0; 3b010 : acc = -m ir 12:0; 3b011 : m ir 12:0 = acc; 3b100, 3b101 : acc = acc - m ir 12:0; 3b110 : if (acc 1; mpy = mpy 1; end a = prod; end endtaskendmodule/Example 2.10.

22、A Function Specification.module mark1Fun; reg 31:0 m 0:8191; / 8192 x 32 bit memory reg 12:0 pc; / 13 bit program counter reg 31:0 acc; / 32 bit accumulator reg 15:0 ir; / 16 bit instruction register always begin ir = m pc; case (ir 15:13) 3b000 : pc = m ir 12:0; 3b001 : pc = pc + m ir 12:0; 3b010 :

23、 acc = -m ir 12:0; 3b011 : m ir 12:0 = acc; 3b100, 3b101 : acc = acc - m ir 12:0; 3b110 : if (acc 1; mpy = mpy 1; end endendfunctionendmodule/Example 2.11. The Multiply as a Separate Module.module mark1Mod; reg 31:0 m 0:8191; / 8192 x 32 bit memory reg 12:0 pc; / 13 bit program counter reg 31:0 acc;

24、 / 32 bit accumulator reg 15:0 ir; / 16 bit instruction register reg 31:0 mcnd; reg go; wire 31:0 prod; wire done; multiply mul (prod, acc, mcnd, go, done); always begin go = 0; ir = m pc; case (ir 15:13) 3b000 : pc = m ir 12:0; 3b001 : pc = pc + m ir 12:0; 3b010 : acc = -m ir 12:0; 3b011 : m ir 12:

25、0 = acc; 3b100, 3b101 : acc = acc - m ir 12:0; 3b110 : if (acc 1; myMpy = myMpy 1; end done = 1; wait (go); endendmodule/Example 3.4. Fibonacci Number Generator Using Named Events.module topNE(); wire 15:0 number, numberOut; numberGenNE ng(number); fibNumberGenNE fng(number, numberOut);endmodulemodule numberGenNE(number); output 15:0 number; re

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1