一、串轉並轉換模組
串轉並就是將低3位訊號和輸入訊號一起賦值。因為經過轉換後,碼元速率會將為原來四分之一,所以設定4分頻時鐘,將其輸出。而並轉串就是不斷右移,取高位輸出。
module serial_par(
input clk,
input d,
output reg [3:0]q
);//四分頻模組
reg [13:0]cnt;
parameter n = 4;
reg clk_out;
always @(posedge clk)
begin
if(cnt == n/2 - 1)begin
cnt <= 14'b0;
clk_out <= ~clk_out;
end
else
cnt <= cnt + 1'b1;
endreg [3:0]data;
always @(posedge clk)
begin
data <= ;
endalways @(posedge clk_out)
begin
q <= data;
endendmodule
序列轉並行資料輸出:採用位拼接技術(移位暫存器),將序列的資料總數先表示出來,然後傳送一位資料加一,後面的接收的這樣標誌:
data_o <= ;
1輸入8輸出的串轉並模組的verilog**
module serial_parallel(
input clk,
input rst_n,en,
input data_i, //一位輸入
output reg [7:0] data_o //8位並行輸出
);always @(posedge clk or negedge rst_n) begin
if (rst_n == 1'b0)
data_o <= 8'b0;
else if (en == 1'b1)
data_o <= ; //低位先賦值
//data_o <= ; //高位先賦值
else
data_o <= data_o;
endendmodule
利用計數器cnt 時鐘計數,開始資料先給高位,每過乙個時鐘週期,資料便給低一位。這樣便可以達到串轉並的效果
1輸入8輸出的串轉並模組的verilog**
module serial_parallel(
input clk,
input rst_n,
input data_i,
output reg [7:0] data_o
);//msb first most significant bit 表示二進位制資料的最高位
reg [2:0] cnt; //計數器0-7
always @(posedge clk or negedge rst_n)begin
if(rst_n == 1'b0)begin
data_o <= 8'b0;
cnt <= 3'd0;
endelse begin
data_o[7 - cnt] <= data_i; 高位先賦值
cnt <= cnt + 1'b1;
endend/*
//lsb first (least significant bit) 表示二進位制資料的最低位
reg [2:0] cnt;
always @(posedge clk or negedge rst_n)begin
if(rst_n == 1'b0)begin
data_o <= 8'b0;
cnt <= 3'd0;
endelse begin
data_o[cnt] <= data_i; //低位先賦值
cnt <= cnt + 1'b1;
endend*/
endmodule
二、並轉串轉換模組
en為輸入有效脈衝,每四個脈衝輸出高電平
module par_serial(
input clk,
input [3:0]d,
input en,
output q
);reg[2:0]cnt;
always @(posedge clk)
begin
if(cnt == 3)begin
en <= 1;
cnt <= 0;
endelse begin
en <= 0;
cnt <= cnt + 1'b1;
endendreg[3:0]data;
always @(posedge clk)
begin
if(en)
data <= d;
else
data <= data << 1;
endassign q = data[3];
endmodule
並串轉換的原理是:
先將八位資料暫存於乙個四位暫存器器中,然後左移輸出到一位輸出埠,這裡通過乙個「移位」指令。
1)用暫存器移位實現,8輸入1輸出的並轉串模組的verilog**
module parallel_serial(
clk, rst_n, en, data_i, data_o
);input clk, rst_n,en;
input [7:0] data_i;
output data_o;
reg [7:0] data_buf;
always @(posedge clk or negedge rst_i) begin
if (rst_i == 1'b0) begin
data_o <= 1'b0;
data_buf <= 8'b0;
endelse if (en == 1'b1)
data_buf <= data_i;
else
data_buf <= data_buf <<1; //將暫存器內的值左移,依次讀出
//data_buf <= ;
endassign data_o = data_buf[7];
endmodule
使能訊號en表示開始執行並轉串操作,由於並轉串是移位操作,當一次並轉串完成後,需要重新載入待轉換的並行資料時,使能訊號要再起來一次
2)用計數器實現
module b_c(clk,rst_n,en,d,q);
input clk,rst_n;
input [3:0]d;
output reg en;
output reg q;
reg [3:0]count;
reg [3:0]data;
always @(posedge clk or negedge rst_n)
begin
if(rst_n==0)
begin
count<=0;
en<=0;;
data<=d;
q<=0;
endelse
begin
if(count<4)
begin
count<=count+1;
en<=1;
data<=;
q<=data[3];
endelse
begin
count<=0;
en<=0;
q<=0;
endend
endendmodule
verilog入門經驗(五) 並轉串
並轉串電路主要由時鐘 clk 復位訊號 rst 並行輸入訊號 pdin 序列輸出訊號 sdout 和使能訊號 en 組成。其它訊號都是名字意義,現在主要講下使能訊號。使能訊號表示開始執行並轉串操作,由於並轉串是移位操作,當一次並轉串完成後,需要重新載入待轉換的並行資料時,使能訊號要再起來一次。下面是...
阻抗串並轉換
如何快速地將併聯阻抗轉換為串聯阻抗?或者將串聯阻抗轉為併聯阻抗?看看下面的講解吧。如圖 1,顯示了將併聯電路轉換為串聯電路的轉換方程式 推導過程見最下面的附錄 圖 1 這些電路為乙個頻率的等效電路 有趣的是,那麼該如何使用它呢?在您需要估算電感 dc 電阻 dcr 和電容等效串聯電阻 esr 對電源...
用WindowsAPI截圖並轉換為RGB格式
在windows下捕獲螢幕影象可以有多重方法,比較簡單可以呼叫第三方庫,如qt的螢幕截圖api就很容易呼叫。在這裡介紹如何用windows api實現截圖並轉換成rgb格式儲存。include 最終f的記憶體布局為bgra格式,需要保證buf長度足夠 w h 4 void screencap voi...