Input And Output Ports
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası. Ders 31 / 90.
Input ve output portları, bir modülün dış dünyayla iletişim kurmasını sağlayan bağlantılardır. Bir çip üzerindeki pinler gibidirler. Portlar, bir modül ile tasarımın geri kalanı arasındaki arayüzdür.
Her module şunlara sahiptir:
- Input portları: module'e gelen sinyaller
- Output portları: module'den çıkan sinyaller
Input Portları
Input portları dışarıdan veri alır. Modülün içinde değiştirilemezler: yalnızca read.
input clk; // Tek bitlik giriş
input [7:0] data; // 8-bit giriş vektörü
input a, b; // Bir satırda birden fazla girişGirdiler için kurallar:
- Modül içinde bir değer atanamaz
regolarak bildirilemez- Her zaman
wire(varsayılan olarak)
Çıkış Portları
Çıkış portları dışarıya data gönderir. Bunlar assign veya always blokları tarafından sürülebilir.
output out; // Tek bitlik çıkış
output [3:0] result; // 4-bit çıkış
output reg busy; // Çıkış reg olabilir
output wire ready; // Çıkış wire olabilirÇıkışlar için kurallar:
wire(assignile) veyareg(alwaysile) olabilirmoduleiçindeki bir şey tarafından sürülmelidir
Port Bildirim Söz Dizimi
Port bildirim söz dizimi, bir modülde giriş ve çıkış portlarını yazdığınız özel biçimdir. Verilog'a her port hakkında üç şey söyler:
- Yön: input, output veya inout mu?
- Boyut: kaç bit genişliğinde?
- Ad: ne olarak adlandırılıyor?
module example (
input [7:0] data_in, // Giriş vektörü
input clk, // Tek giriş
input enable, // Tek giriş
output reg [7:0] out, // Çıkış reg
output busy // Çıkış wire
);Port Yönü Neden Önemlidir
Yön, Verilog'a şunları söyler:
- Modülün can read sinyalleri (inputs)
- Modülün can write sinyalleri (outputs)
- Hangi bağlantı türlerine izin verildiği
Yanlış yön kullanmak derleme hatalarına neden olur.
Kod Örneği
module port_demo (
input [3:0] a, // Sadece okunabilir
input [3:0] b, // Sadece okunabilir
output reg [3:0] sum, // Yazılabilir (reg)
output [3:0] diff // Yazılabilir (wire)
);
always @(*) begin
sum = a + b; // output reg'e yazılıyor
end
assign diff = a - b; // output wire'a yazılıyor
endmoduleGörev
Port Bildirimlerini Tamamla
Yapılacaklar:
- Add 8-bit input called
data_in - Add single-bit input called
clk - Add 4-bit output called
result(reg kullan: always bloğunda atanacak) - Add single-bit output called
valid(wire kullan: assign ile atanacak)
Kendin dene
module port_challenge (
// Görev 1: data_in adında 8-bitlik bir giriş ekle
// Görev 2: clk adında tek bitlik bir giriş ekle
// Görev 3: result adında 4-bitlik bir çıkış ekle (reg kullan)
// Görev 4: valid adında tek bitlik bir çıkış ekle (wire kullan)
);
reg [3:0] counter;
always @(posedge clk) begin
counter <= counter + 1;
result <= counter;
end
assign valid = (counter > 8);
endmoduleBu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temeller bölümündeki tüm dersler
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicKendi başına pratik yap: Online Verilog derleyicisi