LAB1
Vd 1 Nối 10 nút gạt (switch) với 10 led đỏ.
module lab1_1(SW,LEDR);
input [9:0] SW;
output [9:0] LEDR;
assign LEDR = SW;
endmodule
Vd 2 Nối 4 nút bấm (button) với 4 led đỏ. Cho biết khi bấm vào đèn tắt hay sáng?
module lab1_2(BUTTON,LEDR);
input [3:0] BUTTON;
output [3:0] LEDR;
assign LEDR = BUTTON;
endmodule
CÂU 1 : HIỂN THỊ CHỮ HELLO LÊN 5 LED 7 ĐOẠN
module lab1_3(HEX0,HEX1,HEX2,HEX3,HEX4);
output [0:6] HEX0,HEX1,HEX2,HEX3,HEX4;
assign HEX4=7'b1001000;
assign HEX3=7'b0110000;
assign HEX1=7'b1110001;
assign HEX2=7'b1110001;
assign HEX0=7'b0000001;
endmodule
LAB2
module lab2_1(A,B,C,D,Y);
input A,B,C,D;
output Y;
assign Y = ~((~(A^B))|(C&D));
endmodule
module lab2_2 (SW, HEX0);
input [3:0] SW ;
output [0:6] HEX0;
assign HEX0 = (SW == 4'b0000) ? 7'b0000001 : //so0
(SW == 4'b0001) ? 7'b1001111 : // so 1
(SW == 4'b0010) ? 7'b0010010 : // so 2
(SW == 4'b0011) ? 7'b0000110 : // so 3
(SW == 4'b0100) ? 7'b1001100 : // so 4
(SW == 4'b0101) ? 7'b0100100 : // so 5
(SW == 4'b0110) ? 7'b0100000 : // so 6
(SW == 4'b0111) ? 7'b0001111 : // so 7
(SW == 4'b1000) ? 7'b0000000 : // so 8
(SW == 4'b1001) ? 7'b0001100 : // so 9
(SW == 4'b1010) ? 7'b0001000 : // so A
(SW == 4'b1011) ? 7'b1100000 : // so B
(SW == 4'b1100) ? 7'b0110001 : // so C
(SW == 4'b1101) ? 7'b1000010 : // so D
(SW == 4'b1110) ? 7'b0110000 : // so E
(SW == 4'b1111) ? 7'b0111000 : 7'b1111111; // so F
endmodule
LAB3
module Lab3_1(SW, HEX0, HEX1);
input [5:0] SW ;
output [0:6] HEX0, HEX1;
wire [3:0] donvi, chuc;
assign donvi = SW%10 ;
assign chuc = SW/10 ;
assign HEX0 = (donvi == 4'b0000) ? 7'b0000001 :
(donvi == 4'b0001) ? 7'b1001111 :
(donvi == 4'b0010) ? 7'b0010010 :
(donvi == 4'b0011) ? 7'b0000110 :
(donvi == 4'b0100) ? 7'b1001100 :
(donvi == 4'b0101) ? 7'b0010010 :
(donvi == 4'b0110) ? 7'b0100000 :
(donvi == 4'b0111) ? 7'b0001111 :
(donvi == 4'b1000) ? 7'b0000000 :
(donvi == 4'b1001) ? 7'b0000100 : 7'b1111111;
assign HEX1 = (chuc == 4'b0000) ? 7'b0000001 :
(chuc == 4'b0001) ? 7'b1001111 :
(chuc == 4'b0010) ? 7'b0010010 :
(chuc == 4'b0011) ? 7'b0000110 :
(chuc == 4'b0100) ? 7'b1001100 :
(chuc == 4'b0101) ? 7'b0010010 :
(chuc == 4'b0110) ? 7'b0100000 :
(chuc == 4'b0111) ? 7'b0001111 :
(chuc == 4'b1000) ? 7'b0000000 :
(chuc == 4'b1001) ? 7'b0000100 : 7'b1111111;
endmodule
module Lab3_2(SW, HEX0, HEX1);
input [7:0] SW ;
output [0:6] HEX0, HEX1;
wire [4:0] donvi, cong, chuc;
assign cong = SW[7:4] + SW[3:0];
assign donvi = cong%10 ;
assign chuc = cong/10 ;
assign HEX0 = (donvi == 4'b0000) ? 7'b0000001 :
(donvi == 4'b0001) ? 7'b1001111 :
(donvi == 4'b0010) ? 7'b0010010 :
(donvi == 4'b0011) ? 7'b0000110 :
(donvi == 4'b0100) ? 7'b1001100 :
(donvi == 4'b0101) ? 7'b0010010 :
(donvi == 4'b0110) ? 7'b0100000 :
(donvi == 4'b0111) ? 7'b0001111 :
(donvi == 4'b1000) ? 7'b0000000 :
(donvi == 4'b1001) ? 7'b0000100 : 7'b1111111;
assign HEX1 = (chuc == 4'b0000) ? 7'b0000001 :
(chuc == 4'b0001) ? 7'b1001111 :
(chuc == 4'b0010) ? 7'b0010010 :
(chuc == 4'b0011) ? 7'b0000110 :
(chuc == 4'b0100) ? 7'b1001100 :
(chuc == 4'b0101) ? 7'b0010010 :
(chuc == 4'b0110) ? 7'b0100000 :
(chuc == 4'b0111) ? 7'b0001111 :
(chuc == 4'b1000) ? 7'b0000000 :
(chuc == 4'b1001) ? 7'b0000100 : 7'b1111111;
endmodule
module Lab3_3(SW,HEX0,HEX1,HEX2);
input [7:0] SW;
output [0:6] HEX0,HEX1, HEX2;
wire[3:0] donvi,chuc,tram;
wire [7:0] nhan;
assign nhan = SW[7:4]*SW[3:0];
assign donvi = nhan % 4'd10 ;
assign chuc = (nhan%7'd100) / 4'd10; //cach 2: assign chuc = (nhan/4'd10) % 4'd10
assign tram = nhan/7'd100;
assign HEX0 = (donvi == 4'b0000) ? 7'b0000001 :
(donvi == 4'b0001) ? 7'b1001111 :
(donvi== 4'b0010) ? 7'b0010010 :
(donvi == 4'b0011) ? 7'b0000110 :
(donvi == 4'b0100) ? 7'b1001100 :
(donvi == 4'b0101) ? 7'b0100100 :
(donvi == 4'b0110) ? 7'b0100000 :
(donvi == 4'b0111) ? 7'b0001111 :
(donvi == 4'b1000) ? 7'b0000000 :
(donvi == 4'b1001) ? 7'b0000100 : 7'b1111111;
assign HEX1 = (chuc == 4'b0000) ? 7'b0000001 :
(chuc == 4'b0001) ? 7'b1001111 :
(chuc == 4'b0010) ? 7'b0010010 :
(chuc == 4'b0011) ? 7'b0000110 :
(chuc == 4'b0100) ? 7'b1001100 :
(chuc == 4'b0101) ? 7'b0100100 :
(chuc == 4'b0110) ? 7'b0100000 :
(chuc == 4'b0111) ? 7'b0001111 :
(chuc == 4'b1000) ? 7'b0000000 :
(chuc == 4'b1001) ? 7'b0000100 : 7'b1111111;
assign HEX2 = (tram == 4'b0000) ? 7'b0000001 :
(tram == 4'b0001) ? 7'b1001111 :
(tram == 4'b0010) ? 7'b0010010 :
(tram == 4'b0011) ? 7'b0000110 :
(tram == 4'b0100) ? 7'b1001100 :
(tram == 4'b0101) ? 7'b0100100 :
(tram == 4'b0110) ? 7'b0100000 :
(tram == 4'b0111) ? 7'b0001111 :
(tram == 4'b1000) ? 7'b0000000 :
(tram == 4'b1001) ? 7'b0000100 : 7'b1111111;
endmodule
Câu 4:
module test (SW, HEX0, HEX1, HEX2, HEX3, HEX4, HEX5);
input [2:0] SW ;
output [0:6] HEX0, HEX1, HEX2, HEX3, HEX4, HEX5;
assign HEX0 = (SW == 3'b101) ? 7'b1001000 :
(SW == 3'b100) ? 7'b1111001 : 7'b1111111;
assign HEX1 = (SW == 3'b100) ? 7'b1001000 :
(SW == 3'b011) ? 7'b1111001 : 7'b1111111;
assign HEX2 = (SW == 3'b011) ? 7'b1001000 :
(SW == 3'b010) ? 7'b1111001 : 7'b1111111;
assign HEX3 = (SW == 3'b010) ? 7'b1001000 :
(SW == 3'b001) ? 7'b1111001 : 7'b1111111;
assign HEX4 = (SW == 3'b001) ? 7'b1001000 :
(SW == 3'b000) ? 7'b1111001 : 7'b1111111;
assign HEX5 = (SW == 3'b000) ? 7'b1001000 :
(SW == 3'b101) ? 7'b1111001 : 7'b1111111;
endmodule
LAB4
module lab4_1(CLOCK_50, SW, LEDR);
input CLOCK_50;
input [1:0] SW;
output LEDR;
reg [24:0] counter;
always @(posedge CLOCK_50)
counter <= counter + 1'b1;
assign LEDR = (SW == 2'b00) ? counter[24] :
(SW == 2'b01) ? counter[23] :
(SW == 2'b10) ? counter[22] : counter[21];
endmodule
module lab4_2 (CLOCK_50, SW, LEDR);
output reg [2:0] LEDR;
input SW;
input CLOCK_50;
reg [24:0] counter;
always @(posedge CLOCK_50)
counter <= counter + 1'b1;
always @(posedge counter[23])
if (SW) LEDR <= LEDR + 1'b1;
else LEDR = LEDR - 1'b1;
endmodule
module lab4_3 (CLOCK_50, SW, LEDR);
input CLOCK_50;
input [2:0] SW;
output reg [2:0] LEDR;
reg [24:0] counter;
always @(posedge CLOCK_50)
counter <= counter + 1'b1;
assign Q = (SW[2:1] == 2'b00) ? counter[24] :
(SW[2:1] == 2'b01) ? counter[23] :
(SW[2:1] == 2'b10) ? counter[22] : counter[21];
always @(posedge Q)
if (SW[0]) LEDR <= LEDR + 1'b1;
else LEDR = LEDR - 1'b1;
endmodule
module lab4_4 (CLOCK_50,SW, HEX0,HEX1,HEX2,HEX3,HEX4,HEX5);
input CLOCK_50;
input [2:0]SW;
output reg [0:6]HEX0=7'b1111111;
output reg [0:6]HEX1=7'b1111111;
output reg [0:6]HEX2=7'b1111111;
output reg [0:6]HEX3=7'b1111111;
output reg [0:6]HEX4=7'b1111111;
output reg [0:6]HEX5=7'b1111111;
reg [2:0]X=3'b000;
reg [24:0] counter;
always @(posedge CLOCK_50)
counter <= counter + 1'b1;
assign Q= (SW[2:1]==2'b00)?counter[24]:
(SW[2:1]==2'b01)?counter[23]:
(SW[2:1]==2'b10)?counter[22]: counter[21];
always @(posedge Q)
if(SW[0])
begin
if (X<3'b101) X=X+3'b001;
else X=3'b000;
end
else
begin
if(X>3'b000) X=X-3'b001;
else X=3'b101;
end
always @(posedge Q)
if(X==3'b000)
begin
HEX2<=7'b1111111;
HEX3<=7'b1111111;
HEX4<=7'b1111111;
HEX5<=7'b1111111;
HEX0<=7'b1111001;
HEX1<=7'b1001000;
end
else if(X==3'b001)
begin
HEX5<=7'b1111111;
HEX4<=7'b1111111;
HEX3<=7'b1111111;
HEX0<=7'b1111111;
HEX1<=7'b1111001;
HEX2<=7'b1001000;
end
else if(X==3'b010)
begin
HEX0<=7'b1111111;
HEX4<=7'b1111111;
HEX5<=7'b1111111;
HEX1<=7'b1111111;
HEX2<=7'b1111001;
HEX3<=7'b1001000;
end
else if(X==3'b011)
begin
HEX5<=7'b1111111;
HEX1<=7'b1111111;
HEX0<=7'b1111111;
HEX2<=7'b1111111;
HEX3<=7'b1111001;
HEX4<=7'b1001000;
end
else if(X==3'b100)
begin
HEX2<=7'b1111111;
HEX1<=7'b1111111;
HEX0<=7'b1111111;
HEX3<=7'b1111111;
HEX4<=7'b1111001;
HEX5<=7'b1001000;
end
else
begin
HEX3<=7'b1111111;
HEX2<=7'b1111111;
HEX1<=7'b1111111;
HEX4<=7'b1111111;
HEX5<=7'b1111001;
HEX0<=7'b1001000;
end
endmodule
LAB5
Câu 1 : Thiết kế mạch dịch LED 10 bit từ phải sang trái (1 LED sáng chạy từ phải
sang trái). Ngõ ra là 10 LED đỏ
module lab5_1 (CLOCK_50, LEDR);
input CLOCK_50;
output reg[9:0] LEDR=10'b0000000001;
reg[25:0]counter;
always @(posedge CLOCK_50)
counter<=counter+ 1'b1;
always @(posedge counter[22])
LEDR={LEDR[8:0],LEDR[9]}; //tu trai sang phai LEDR={LEDR[0],LEDR[9:1]};
endmodule
Câu 2 Thiết kế mạch dịch LED 10 bit chạy từ ngoài vào giữa (2 LED sáng ở 2 đầu và dịch vào giữa
module lab5_2 (CLOCK_50,LEDR);
input CLOCK_50;
output reg[9:0] LEDR=1000000001;
reg[25:0]counter;
always @(posedge CLOCK_50)
counter<=counter+ 1'b1;
always @(posedge counter[22])
/EDR={LEDR[5],LEDR[9:6],LEDR[3:0],LEDR[4]}; //tu ngoai vao trong
//tu trong ra ngoai LEDR={LEDR[8:5],LEDR[9],LEDR[0],LEDR[4:1]};
endmodule
Câu 3 Thiết kế mạch dịch LED 10 bit điều khiển bằng 3 nút gạt. Trong đó, 1 nút gạt xuống 0 thì
dịch từ trái sang phải, lên 1 thì dịch từ phải sang trái. 2 nút gạt còn lại điều khiển tốc độ dịch của
LED.
module lab5_3(CLOCK_50,SW,LEDR);
reg[25:0]counter;
input CLOCK_50;
input [2:0]SW;
reg K;
output reg[9:0]LEDR=10'b1;
always @(posedge CLOCK_50)
counter<=counter+ 1'b1;
assign Q1= (SW[2:1] == 2'b00) ? counter[25]:
(SW[2:1] == 2'b01) ? counter[24]:
(SW[2:1] == 2'b10) ? counter[23]:counter[22];
always @(posedge Q1)
K= LEDR[0]+LEDR[1]+LEDR[2]+LEDR[3]+LEDR[4]+LEDR[5]+LEDR[6]+LEDR[7]+LEDR[8]+LEDR[9];
always @(posedge Q1)
if (K==10'b1)
begin
if(SW[0])
LEDR={LEDR[8:0],LEDR[9]};
else
LEDR={LEDR[0],LEDR[9:1]};
end
else
LEDR=10'b1;
endmodule