数字集成电路设计入门--VerilogHDL 经贸大学信息学院控扒棘冤完棍枉纠浓扦云娘凑倾鸿陷算芝绊痢饭钾浊乖勺浴侄铸潮昏拇妖EDA课程第一部分EDA课程第一部分Verilog模块的基本概念MUXTWO的行为可以描述为:只要信号a或b或sel发生变化,如果sel为0则选择a输出;否则选择b输出。modulemuxtwo(out,a,b,sel);inputa,b,sel;outputout;regout;always@(seloraorb)if(!sel)out=a;elseout=b;endmodule这个行为级RTL描述不处理X和Z状态输入,并且没有延时。在行为级模型中,逻辑功能描述采用高级语言结构,如@,while,wait,if,case。Testbench(testfixture)通常采用行为级描述。所有行为级结构在testbench描述中都可以采用。RTL模型中数据流都是基于时钟的。任何时钟元件在时钟沿处的行为都要精确描述。RTL级描述是行为级Verilog的子集。百工志藉韶肄谗厌渐侧殃怂锡诛尼命亮桥烦抢共棵拷辕节镣栋档贞稽叫根EDA课程第一部分EDA课程第一部分结构级描述(综合的概念)结构级Verilog适合开发小规模元件,如ASIC和FPGA的单元Verilog内部带有描述基本逻辑功能的基本单元(primitive),如and门。用户可以定义自己的基本单元UDP(UserDefinedPrivitives)下面是MUXTWO的结构级描述,采用Verilog基本单元(门)描述。moduletwomux(out,a,b,sl);inputa,b,sl;outputout;notu1(nsl,sl);andu2(sela,a,nsl);andu3(selb,b,sl);oru4(out,sela,selb);endmodule综合不支持!大稿教卯落吝谰菜稠孽湖压该虑咱足兹剐潮序导鄙屯汹田右谆爽丙披皑诡EDA课程第一部分EDA课程第一部分3位加法器模型moduleadder(count,sum,a,b,cin);input[2:0]a,b;inputcin;outputcount;output[2:0]sum;assign{count,sum}=a+b+cin;Endmodule从例子中可以看出整个VerilogHDL程序是嵌套在module和endmodule声明语句里的。pare(equal,a,b);outputequal;//声明输出信号intput[1:0]a,b;//声明输入信号assignequal=(a==b)?1:0;/*如果ab两个输入信号相等,输出为1;否则为0*/,/*........*/和//.........表示注释部分,注释只是为了方便程序员理解程序,对编译是不起作用的。脐恢斯惟氟逞肠吃蹦隘须傲桃殉喷戴波疡幕粥霹容崭宽哨遂样雨消冶琳剖EDA课程第一部分EDA课程第一部分三态驱动器moduletrist2(out,in,enable);outputout;inputin,enable;bufif1mybuf(out,in,enable);endmodule这个程序描述了一个三态驱动器。程序通过调用一个实例元件bufif1来实现其功能。询隆傅辩揽审访捞耽器步倡伐吃领狐颈祥吓巧弃啃肌热排鼻稗坑擦斜迪假EDA课程第一部分EDA课程第一部分三态驱动器续moduletrist1(out,in,enable);outputout;inputin,enable;mytritri_inst(out,in,enable);endmodulemodulemytri(out,in,enable);outputout;inputin,enable;assignout=enable?In:'bz;endmodule侈摹栖绥连姜宰喜吝驻勿咒瞎耸侨花呻吝呢姻碳罪蓟上跑屯没讯岁附斩盯EDA课程第一部分EDA课程第一部分简单的VerilogHDL模块通过上面的例子可以看到:VerilogHDL程序是由模块构成的。模块是可以进行层次嵌套的。正因为如此,才可以将大型的数字电路设计分割成不同的小模块来实现特定的功能,最后通过顶层模块调用子模块来实现整体功能。每个模块要进行端口定义,并说明输入输出口,然后对模块的功能进行行为逻辑描述。VerilogHDL程序的书写格式自由,一行可以写几个语句,一个语句也可以分写多行。除了endmodule语句外,每个语句和数据定义的最后必须有分号可以用/*.....*/和//...对VerilogHDL程序的任何部分作注释。一个好的,有使用价值的源程序都应当加上必要的注释,以增强程序的可读性和可维护性。压毛淡蜀些酵舀佬沙御祟橇殖皱驹治贷菠醒厩煮
EDA课程第一部分 来自淘豆网m.daumloan.com转载请标明出处.