设计
二选一选择器三种方法
行为模块
/*端口定义,说明输入输出口,然后对模块功能描述*/
/*不关心电路结构,关心逻辑功能描述*/
module muxtwo(out,a,b,sl);
input a,b,sl;
output out;
reg out;
always@(sl or a or b)
if(!sl) out=a;
else out=b;
endmodule //除了endmoule语句,每个语句和数据定义后都要加;
用布尔表达式模块
module muxtwo(out,a,b,sel); //习惯输出写在前
input a,b,sl;
output out;
wire nsl,sela,selb; //定义内部连线,可以看到这些端口没有在module名括号里说明
assign nsl=~nsl;
assign sela=nsl&a;
assgin selb=sel&b;
assign out=sela|selb; //位运算操作符与(&)或(|)非(~)
endmoule
门级结构模块
module muxtwo(out,a,b,sl);
input a,b,sl;
output out;
not u1(nsl,sl);
and #1 u2(sela,nsl,a); //#1表示门输入到输出的延迟为一个单位时间
and #1 u3(selb,sl,b);
or #1 u4(out,sela,selb); //u1,u2,u3,u4表示逻辑元件的实例化
endmoule
把代码1通过代码2的中间形式转换为代码3这样的模块就是一个综合过程。
拼接
assign {count,sum}=a+b+cin; //加法器
比较
assign equal=(a==b)?1:0; //a==b,输出为1,否则为0;
实例化
mytri tri__inst(.out(sout),.in(sin),.enable(ena)); //mytri为模块名,tri_inst为实例,实例中,带“.“表示被引用模块的端口,名称必须与被引用模块mytri的端口定义一致,括号内表示在本模块中与之连接的线路
测试
描述测试信号的变化和测试过程的模块也称为测试平台
测试可以在功能(行为)级上进行,也可以在逻辑网表(逻辑布尔表达式)和门级结构上进行,分别称为前(RTL)仿真、逻辑网表仿真和门级仿真。
如果门级结构模块与具体的工艺技术对应起来,并加上布局布线引入的延迟模型,此时进行的仿真称为布线后仿真,这种仿真与实际电路情况非常接近。