超级好用的串并转换Verilog

串并转换都是利用移位寄存器。本文拿四位串并转换举例。
串转并就是将低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;
end

reg [3:0]data;
always @(posedge clk)
begin
    data <= {data[2:0],d};
end

always @(posedge clk_out)
begin
    q <= data;
end

endmodule

并转串

module par_serial(
    input clk,
    input [3:0]d,
    input en,
    output q
);

reg[3:0]data;
always @(posedge clk)
begin
    if(en)
        data <= d;
    else 
        data <= data << 1;
end
assign q = data[3];

endmodule

其中en为输入有效脉冲,每四个脉冲输出高电平,如下

reg[2:0]cnt;
always @(posedge clk)
begin
    if(cnt == 3)begin
        en <= 1;
        cnt <= 0;
    end
    else begin
        en <= 0;
        cnt <= cnt + 1'b1;
    end
end

大家可以自己产生一个01序列,进行串并转换后,再并串转换,就能得到原序列,以此作为测试。
相信大家在理解本文后,就知道8位或是更高位数的串并转换应该怎么写了。只用修改相应寄存器位数,对应时钟分频、脉冲信号即可。

你可能感兴趣的:(超级好用的串并转换Verilog)