最近在学数字逻辑和Verilog,研究单片机,于是发一发这些东西,希望能帮助有困惑的其他人。
Verilog与门、或门、非门、异或门、同或门的测试文件和仿真文件,
module Doors(
input wire a,
input wire b,
output wire [5:0] z
);
assign z[5]=a&b;
assign z[4]=~(a&b);
assign z[3]=a|b;
assign z[2]=~(a|b);
assign z[1]=a^b;
assign z[0]=a~^b;
endmodule
仿真:
module sim();
reg a;
reg b;
wire [5:0]z;
Doors u1(a,b,z);
initial begin
a=0;
b=0;
end
always begin
#10 a=~a;
#40 b=~b;
end
endmodule
10-4BCD优先译码器:
`timescale 1 ns / 1 ps
module bm10_4 (a,clk,b);
input [9:0]a;
input clk ;
output [3:0]b;
reg [3:0] b;
always @ ( posedge clk )
begin
case (a)
10'b000000_0001 : b<=4'b0000;
10'b000000_0010 : b<=4'b0001;
10'b000000_0100 : b<=4'b0010;
10'b000000_1000 : b<=4'b0011;
10'b000001_0000 : b<=4'b0100;
10'b000010_0000 : b<=4'b0101;
10'b000100_0000 : b<=4'b0110;
10'b001000_0000 : b<=4'b0111;
10'b010000_0000 : b<=4'b1000;
10'b100000_0000 : b<=4'b1001;
default : b<= 4'b0000;
endcase
end
endmodule
仿真文件:
module bm10_4_sim;
reg [9:0]a;
reg clk;
wire [3:0]b;
bm10_4 u1(a,clk,b);
initial begin
clk=0;
a[0]=0;
a[1]=0;
a[2]=0;
a[3]=0;
a[4]=0;
a[5]=0;
a[6]=0;
a[7]=0;
a[8]=0;
a[9]=0;
end
always #2 clk=~clk;
always begin
#10 a[0]=~a[0];
#20 a[1]=~a[1];
#30 a[2]=~a[2];
#40 a[3]=~a[3];
#50 a[4]=~a[4];
#60 a[5]=~a[5];
#70 a[6]=~a[6];
#80 a[7]=~a[7];
#90 a[8]=~a[8];
#100 a[9]=~a[9];
end
endmodule