0% found this document useful (0 votes)
8 views16 pages

On Verilog

Uploaded by

Thái Phúc Lưu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views16 pages

On Verilog

Uploaded by

Thái Phúc Lưu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 16

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

You might also like