HDLBits - Verilog Language / Basics

yfwang
3 min readJun 7, 2023

--

Outline

Simple wire

本題要連接電路的 input 與 output,用 assign 定義 output。

module top_module( input in, output out );
assign out = in;
endmodule

Four wires

根據圖片連接 3 輸入 4 輸出,一樣用 assign 定義 output。

module top_module( 
input a,b,c,
output w,x,y,z );

assign w = a;
assign x = b;
assign y = b;
assign z = c;

endmodule

也可以用 vector 型式。

module top_module( 
input a,b,c,
output w,x,y,z );

assign {w,x,y,z} = {a,b,b,c};

endmodule

Inverter

這題用了 NOT 邏輯閘,直接以 ~ 表示即可。

module top_module( input in, output out );
assign out = ~in;
endmodule

AND gate

換成 AND 邏輯閘,以 & 表示。

module top_module( 
input a,
input b,
output out );

assign out = a&b;

endmodule

NOR gate

NOR 邏輯閘,用 OR | 跟 NOT ~ 結合。

module top_module( 
input a,
input b,
output out );

assign out = ~(a|b);

endmodule

XNOR gate

XNOR 邏輯閘,用 XOR ^ 跟 NOT ~ 結合。

module top_module( 
input a,
input b,
output out );

assign out = ~(a^b);

endmodule

Declaring wires

題目要求用 wire 去連接輸入輸出和邏輯閘,類似程式語言函數裡的變數 ; 注意用 wire 時必須用 assign 定義。

  1. 下列程式碼的 `default_nettype none 是不讓未宣告的類型預設為 wire,因此本題不用 assign 會出錯。
  2. out_n 定義為 ~(w1|w2) 也可以直接用 ~out,或是如圖所示再建一個 wire
`default_nettype none
module top_module(
input a,
input b,
input c,
input d,
output out,
output out_n );

wire w1; wire w2;
assign w1 = a&b;
assign w2 = c&d;
assign out = (w1|w2);
//assign out_n = ~out; //pass
assign out_n = ~(w1|w2);

endmodule

7458 chip

7458 晶片的功能實踐,按照題目給的圖片定義即可。這裡我偷懶不想定義 wire

module top_module ( 
input p1a, p1b, p1c, p1d, p1e, p1f,
output p1y,
input p2a, p2b, p2c, p2d,
output p2y );

assign p1y = (p1a&p1b&p1c) | (p1d&p1e&p1f);
assign p2y = (p2a&p2b) | (p2c&p2d);

endmodule

--

--