Abstract 在實務上常常需要將parallel 轉成serial,然後再將serial 轉成parallel,本文討論如何實現這些功能。 Introduction 使用環境:NC-Verilog 5.4 + Debussy 5.4 v9 + Quartus II 7.2 很多介面都採用serial 傳輸,如I2C、LVDS、mini-LVDS…等,在寫入時必須將parallel資料轉成serial,讀出時又得將serial 轉成parallel,所以是個常用的電路,其原理就是使用shift register 來達成,本文將一一討論parallel 轉serial,serial 轉parallel,也順便討論parallel 轉parallel 與 serial 轉serial。 並進串出 (Parallel In Serial Out) 當load 為1 且clk rising edge 時,parallel data 載入至register 當中,當load 為0 且clk rising edge 時,register 資料依序往前遞移,在最後一個register 將資料送出。 p2s.v / Verilog 1 /* 2 (C) OOMusou 2009 http://oomusou.cnblogs.com 3 4 Filename : p2s.v 5 Simulator : NC-Verilog 5.4 + Debussy 5.4 v9 6 Synthesizer : Quartus II 7.2 7 Description : parallel in serial out rtl 8 Release : Oct/24/2009 1.0 9 */ 10 11 module p2s ( 12 clk, 13 rst_n, 14 load, 15 pi, 16 so 17 ); 18 19 input clk; 20 input rst_n; 21 input load; 22 input [3:0] pi; 23 output so; 24 25 reg [3:0] r; 26 27 always@(posedge clk or negedge rst_n) 28 if (~rst_n) 29 r <= 4'h0; 30 else if (load) 31 r <= pi; 32 else 33 r <= {r, 1'b0}; 34 35 assign so = r[3]; 36 37 endmodule 33 行 r <= {r, 1'b0}; 用Verilog 實現shift register 有很多種方式,但以33 行這種方式最精簡,其他coding sty le 可參考(筆記) 如何將值delay n 個clock? (SOC) (Verilog)。 Testbench p2s_tb.v / Verilog 1 /* 2 (C) OOMusou 2009 http://oomusou.cnblogs.com 3 4 Filename : p2s_tb.v 5 Simulator : NC-Verilog 5.4 + Debussy 5.4 v9 6 Description : parallel in serial out testbench 7 Release : Oct/24/2009 1.0 8 */ 9 10 `timescale 1ns/1ns 11 `include "p2s.v" 12 13 module p2s_tb; 14 15 reg clk; 16 reg rst_n; 17 reg load; 18 reg [3:0...