利用Verilog语言实现不同的多输入基本逻辑门。
//******************************************************** // // Copyright(c)2016, STEP FPGA // All rights reserved // // File name : four_in_gates.v // Module name : four_in_gates // Author : STEP // Email : info@stepfpga.com // Data : 2016/08/19 // Version : V1.0 // Description : 4 inputs and 6 logic four_in_gates // // Modification history // ---------------------------------------------------------------------------- // Version Data(2016/08/19) V1.0 // Description // //******************************************************** // // //******************* //DEFINE MODULE PORT //******************* module four_in_gates ( //INPUT a , //OUTPUT led , empty ); //******************* //DEFINE INPUT //******************* input [3:0] a; //******************* //DEFINE OUTPUT //******************* output [7:0] empty; output [5:0] led; wire [5:0] z; //Combinational logic style // assign z[5]=a[0]&a[1]&a[2]&a[3]; //three kinds of AND logic expression // assign z[5]=&a; and(z[5],a[0],a[1],a[2],a[3]); // assign z[4]=~(a[0]&a[1]&a[2]&a[3]); //three kinds of NAND logic expression // assign z[4]=~&a; nand(z[4],a[0],a[1],a[2],a[3]); // assign z[3]=a[0]|a[1]|a[2]|a[3]; //three kinds of OR logic expression // assign z[3]=|a; or(z[3],a[0],a[1],a[2],a[3]); // assign z[2]=~(a[0]|a[1]|a[2]|a[3]); //three kinds of NOR logic expression // assign z[2]=~|a; nor(z[2],a[0],a[1],a[2],a[3]); // assign z[1]=a[0]^a[1]^a[2]^a[3]; //three kinds of XOR logic expression // assign z[1]=^a; xor(z[1],a[0],a[1],a[2],a[3]); // assign z[0]=a[0]~^a[1]~^a[2]~^a[3]; //three kinds of XNOR logic expression // assign z[0]=~^a; xnor(z[0],a[0],a[1],a[2],a[3]); assign led=~z; //led is low active assign empty=8'b1111_1111; //led's defualt mode is lighted endmodule
// //******************* //DEFINE MODULE PORT //******************* `timescale 1ns/100ps module four_in_gates_tb; reg [3:0] a; initial begin a[0]=0; a[1]=0; a[2]=0; a[3]=0; #50; a[0]=0; a[1]=0; a[2]=0; a[3]=1; #50; a[0]=0; a[1]=0; a[2]=1; a[3]=0; #50; a[0]=0; a[1]=0; a[2]=1; a[3]=1; #50; a[0]=0; a[1]=1; a[2]=0; a[3]=0; #50; a[0]=0; a[1]=1; a[2]=0; a[3]=1; #50; a[0]=0; a[1]=1; a[2]=1; a[3]=0; #50; a[0]=0; a[1]=1; a[2]=1; a[3]=1; #50; a[0]=1; a[1]=0; a[2]=0; a[3]=0; #50; a[0]=1; a[1]=0; a[2]=0; a[3]=1; #50; a[0]=1; a[1]=0; a[2]=1; a[3]=0; #50; a[0]=1; a[1]=0; a[2]=1; a[3]=1; #50; a[0]=1; a[1]=1; a[2]=0; a[3]=0; #50; a[0]=1; a[1]=1; a[2]=0; a[3]=1; #50; a[0]=1; a[1]=1; a[2]=1; a[3]=0; #50; a[0]=1; a[1]=1; a[2]=1; a[3]=1; #50; end four_in_gates four_in_gates_tb_uut( .a(a) ); endmodule
双击打开Lattice Diamond软件,点击File—New—Project新建工程,输入工程名称,指定工程保存目录,单击Next,选择设备如下:
点击File—New—File新建文件,类型选择Verilog Files,输入文件名称,选择保存路径,输入实验中的源代码后保存,编辑器会自动检查有无编辑错误,在下面的Output一栏会输出检查结果,如果有错误更正后重新保存直到没有报错为止。
按照步骤(2)新建一个Verilog仿真文件,输入实验例程中仿真文件的代码后保存。在软件File List一栏中,右键单击“仿真文件”—Include for—Simulation,将文件设置为仿真文件(设置完成后文件图标的V会消失)。
点击Tools选择Simulation Wizard或点击图标,按照仿真向导指示新建仿真工程,
仿真软件会自动启动、运行仿真并显示仿真结果。查看仿真结果是否符合预期功能,如果不符合电路功能,则修改Verilog代码保存后,在Active-HDL中选择Design—Compile All 重新编译文件,编译通过后,在Simulation中重新开始仿真。
在Lattice Diamond软件的Process一栏,双击第一项Synthesize Design进行综合(确保仿真文件设置为simulation后不参与综合),综合结果会在下面的Output一栏中给出,如果有错误则修改Verilog文件后重新综合直至综合成功为止。
双击Process一栏的Map Design和Place & Route Design完成FPGA内部的布局布线。
勾选并双击JEDEC File生成可下载的jed文件。