数字电路中的串并转换主要设计思想来源于用面积换速度,对数据流进行管理。实现串并转换的主要方式有双口RAM,FIFO,移位寄存器等,对于数据量较大的一般使用双口RAM或者FIFO实现,数据量较小的使用移位寄存器实现。
一、串转并
module serial2parallel(
input clk,
input rst_n,
input data_valid,
input data_in, //一位输入
output reg [7:0] data_out //8位并行输出
);
always @(posedge clk or negedge rst_n) begin
if (rst_n == 1'b0)
data_out <= 8'b0;
else if (data_valid == 1'b1)
data_out <= {data_out[6:0], data_in}; //低位先赋值
//data_out <= {data_in,data_out[7:1]}; //高位先赋值
else
data_out <= data_out;
end
endmodule
二、并转串
module parallel2serial(
input clk,
input rst_n,
input data_valid,
input [7:0]data_in,//输入的8位并行数据
output data_out //输出的1位串行数据
);
reg[7:0]data;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
data <= 8'b0;
else if(data_valid)
data <= data_in;
else
data <= data << 1;
end
assign data_out = data[7];
endmodule