HDL源文件
// 3217005109_BasGate.v module gates_1(A,B,Y1,Y2,Y3,Y4,Y5); input A,B; output Y1,Y2,Y3,Y4,Y5; assign Y1=A&B; //为输出信号赋值;可以使用三目运算符:y = (s == 0) ? a : b; s为0时y=a,否则y=b assign Y2=A|B; assign Y3=~(A&B); assign Y4=~(A|B); assign Y5=A^B; endmodule module gates_2(A,Y); input [1:6]A; output [1:6]Y; assign Y=~A; endmodule //3输入、1输入的举重裁判表决电路 module gates_3(A,B,C,Y); input A,B,C; output Y; assign Y=A&B|B&C|A&C; endmodule //3输入、1输入的交通灯故障检测电路 module gates_4(R,Y,G,Z); input R,Y,G; output Z; assign ~(R|Y|G)|RY|RG|YG; endmodule
按hdl editor旁边那个按钮新建测试文件
// test_BasGate.v `timescale 1ns/1ns module testBasGate_1(); reg A,B; //输入信号:reg表示需要保存 wire Y1,Y2,Y3,Y4,Y5; //wire:默认类型,不保存值 gates_1 v1(A,B,Y1,Y2,Y3,Y4,Y5); //实例化了一个gates_1模块,名为v1;后面有很多个同名的,其实应该不同才对,这样就可以不注释掉模块二通过指定options来对特定模块进行仿真 initial begin A=0;B=0; #10 B=1; //信号翻转;10ns后B变为1 #10 A=1; #10 B=0; #10; end endmodule module testBasGate_2(); reg [1:6]A; wire [1:6]Y; gates_2 v2(A,Y); initial begin A=000001; #10 A=A<<1; #10 A=A<<1; #10 A=A<<1; #10 A=A<<1; #10 A=A<<1; end endmodule //举重电路 module testBasGate_3(); reg A,B,C; //输入信号:reg表示需要保存 wire Y; //wire:默认类型,不保存值 gates_3 v1(A,B,C,Y); //实例化了一个gates_1模块,名为v1 initial begin #10 A=0;B=0;C=0; //信号翻转;10ns后B变为1 #10 A=0;B=0;C=1; #10 A=0;B=1;C=0; #10 A=0;B=1;C=1; #10 A=1;B=0;C=0; #10 A=1;B=0;C=1; #10 A=1;B=1;C=0; #10 A=1;B=1;C=1; end endmodule //交通灯故障电路 module testBasGate_4(); reg R,Y,G; //输入信号:reg表示需要保存 wire Z; //wire:默认类型,不保存值 gates_4 v1(R,Y,G,Z); //实例化了一个gates_1模块,名为v1 initial begin #10 R=0;Y=0;G=0; //信号翻转;10ns后B变为1 #10 R=0;Y=0;G=1; #10 R=0;Y=1;G=0; #10 R=0;Y=1;G=1; #10 R=1;Y=0;G=0; #10 R=1;Y=0;G=1; #10 R=1;Y=1;G=0; #10 R=1;Y=1;G=1; end endmodule
- 按M开头那个按钮进行第一次仿真,先进行options配置
- 1000ns:随便设置都可以
- testBasGate_3:测试文件中的module名
- v1: 实例化模块名
- 然后按sy开头那个按钮运行综合结果
- 进行第二次仿真
按最下面那个按钮,把所有模块都点绿(一路按默认值) - 进行第三次仿真
- 点最后一行第二个按钮,接烧录器,开箱子电源,点最后一个模块,pass之后拔下烧录器,点开主界面最后一行的按钮,查看io引脚,开始接线。