Transmitter Design
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 89/90。
チャレンジ
このレッスンでは、固定された文字 'A' だけでなく、任意のバイトを送信できるように、shift registerを追加してUART transmitterを完成させます。
shift registerはフレーム全体(stop bit + 8 data bits + start bit)を読み込み、1ビットずつシフトして送信します。
フレーム形式
| Stop (1) | Data (8 bits) | Start (0) |
|---|---|---|
| 1 | data_in | 0 |
たとえば、data_in = 8'b01000001(文字 'A')の場合、shift registerは次のようになります:1 01000001 0
あなたの課題
前のレッスンのstate machine(固定バイトを送信)が与えられています。data_in inputから任意のバイトを送信できるように変更してください。
行うこと:
- port list(括弧内)に、
data_inという名前のinput [7:0]を追加する - 10ビットの
regであるshift_regを括弧の外側(内部signalなので、module本体の中)に追加する cnt == 0かつstart == 1のとき:shift_regに{1'b1, data_in, 1'b0}を読み込む
cntが1から8の間のとき:tx <= shift_reg[0]を送信する- 右にシフトする:
shift_reg <= shift_reg >> 1
cnt == 9のとき:tx <= shift_reg[0]を送信する- 右にシフトする:
shift_reg <= shift_reg >> 1
自分で試してみよう
module uart_tx (
input clk,
input start, // NEW: 送信を開始するためのスタート信号
output reg tx, // NEW: シリアル出力ライン
output reg [3:0] cnt // テスト用に出力として保持
);
initial begin
cnt = 0;
tx = 1; // NEW: tx を HIGH に設定(アイドル状態)
end
always @(posedge clk) begin
// NEW: スタート条件付きのカウンタロジック
if (cnt == 0 && start) begin // NEW: 送信を開始
cnt <= 1;
end
else if (cnt > 0 && cnt < 9) begin // NEW: 送信中にカウント
cnt <= cnt + 1;
end
else if (cnt == 9) begin // NEW: 最後のビットの後にリセット
cnt <= 0;
end
end
endmodule基礎のすべてのレッスン
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 Logic自分で練習してみよう: Verilogオンラインコンパイラ