Bugsmux2原本代码的逻辑是反的,这不是坑人吗。moduletop_module(inputsel,input[7:0]a,input[7:0]b,output[7:0]out);assignout=({8{sel}}&a)|({8{~sel}}&b);endmoduleBugsnand3五输入的与门现在要实现三输入的与非门,多余的门可以输入1并将输出取反。moduletop_module(inputa,inputb,inputc,outputout);//wireout_n;andgateinst1(out_n,a,b,c,1'b1,1'b1);assignout=~out_n;endm
Bugsmux2原本代码的逻辑是反的,这不是坑人吗。moduletop_module(inputsel,input[7:0]a,input[7:0]b,output[7:0]out);assignout=({8{sel}}&a)|({8{~sel}}&b);endmoduleBugsnand3五输入的与门现在要实现三输入的与非门,多余的门可以输入1并将输出取反。moduletop_module(inputa,inputb,inputc,outputout);//wireout_n;andgateinst1(out_n,a,b,c,1'b1,1'b1);assignout=~out_n;endm
Vector0向量赋值。moduletop_module(inputwire[2:0]vec,outputwire[2:0]outv,outputwireo2,outputwireo1,outputwireo0);//Modulebodystartsaftermoduledeclarationassignoutv=vec;assigno2=vec[2];assigno1=vec[1];assigno0=vec[0];endmoduleVector1注意使用未声明的接口会隐式地生成一个1bit的wire变量,加一个`default_nettypenone可以不隐式声明,从而找到一些隐藏的bug。
Vector0向量赋值。moduletop_module(inputwire[2:0]vec,outputwire[2:0]outv,outputwireo2,outputwireo1,outputwireo0);//Modulebodystartsaftermoduledeclarationassignoutv=vec;assigno2=vec[2];assigno1=vec[1];assigno0=vec[0];endmoduleVector1注意使用未声明的接口会隐式地生成一个1bit的wire变量,加一个`default_nettypenone可以不隐式声明,从而找到一些隐藏的bug。
Module模块例化的两种方式:按端口位置例化、按端口名例化。moduletop_module(inputa,inputb,outputout);mod_ainstance1(.in1(a),.in2(b),.out(out));endmoduleModulepos按端口顺序例化。moduletop_module(inputa,inputb,inputc,inputd,outputout1,outputout2);mod_ainst(out1,out2,a,b,c,d);endmoduleModulename按端口名例化moduletop_module(inputa,inputb,inputc
Module模块例化的两种方式:按端口位置例化、按端口名例化。moduletop_module(inputa,inputb,outputout);mod_ainstance1(.in1(a),.in2(b),.out(out));endmoduleModulepos按端口顺序例化。moduletop_module(inputa,inputb,inputc,inputd,outputout1,outputout2);mod_ainst(out1,out2,a,b,c,d);endmoduleModulename按端口名例化moduletop_module(inputa,inputb,inputc
Sim/circuit1从波形不难看出ab是相与的关系。moduletop_module(inputa,inputb,outputq);//assignq=a&b;//FixmeendmoduleSim/circuit2 根据波形图可以画出卡诺图并且之前有写过这个卡诺图的逻辑表达式,不难看出相邻逻辑输出会取反,所以这个是一个四变量的异或,0000输出为1,所以还要再取反。moduletop_module(inputa,inputb,inputc,inputd,outputq);//assignq=~(a^b^c^d);//FixmeendmoduleSim/circuit3继续画卡诺图 m
Sim/circuit1从波形不难看出ab是相与的关系。moduletop_module(inputa,inputb,outputq);//assignq=a&b;//FixmeendmoduleSim/circuit2 根据波形图可以画出卡诺图并且之前有写过这个卡诺图的逻辑表达式,不难看出相邻逻辑输出会取反,所以这个是一个四变量的异或,0000输出为1,所以还要再取反。moduletop_module(inputa,inputb,inputc,inputd,outputq);//assignq=~(a^b^c^d);//FixmeendmoduleSim/circuit3继续画卡诺图 m
Alwaysblock1组合逻辑always块的使用,注意这里的wire和reg综合出来的结果是一样的,这里只是verilog语法导致二者声明不一样。//synthesisverilog_input_versionverilog_2001moduletop_module(inputa,inputb,outputwireout_assign,outputregout_alwaysblock);assignout_assign=a&b;always@(*)beginout_alwaysblock=a&b;endendmoduleAlwaysblock2组合逻辑用阻塞赋值,时序逻辑用非阻塞赋值,这里
Alwaysblock1组合逻辑always块的使用,注意这里的wire和reg综合出来的结果是一样的,这里只是verilog语法导致二者声明不一样。//synthesisverilog_input_versionverilog_2001moduletop_module(inputa,inputb,outputwireout_assign,outputregout_alwaysblock);assignout_assign=a&b;always@(*)beginout_alwaysblock=a&b;endendmoduleAlwaysblock2组合逻辑用阻塞赋值,时序逻辑用非阻塞赋值,这里