1.串行转并行
1.1 利用移位寄存器
采用位移拼接技术,当使能信号发出时,进行移位输出(注意低位和高位先赋值表达方式不同);当使能信号无时,后续数据不发出。
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)
data_o <= 8'd0;
else if (en)
data_o <= {data_o[6:0], data_i}; //低位先赋值
//data_o <= {data_i,data_o[7:1],}; //高位先赋值
else
data_o <= data_o;
end
endmodule
1.2 利用计数器
利用计数器,每过一个周期移动一位,数据输出一位;文章来源:https://www.toymoban.com/news/detail-790736.html
module serial_parallel(
input clk,
input rst_n,en,
input data_i, //一位输入
output reg [7:0] data_o //8位并行输出
);
reg [2:0]cnt;//如果data位数不是刚好为7,那么还需要考虑加到最大值后回到0的情况
always @(posedge clk, negedge rst_n)begin
if(!rst_n)
cnt<=3'd0;
else
cnt<=cnt+1'b1;
end
always @(posedge clk, negedge rst_n)begin
if(!rst_n)
data_o<=8'd0;
else
data_o[7-cnt]<=data_i;//最先输入最高位
//data_o[cnt]<=data_i;//最先输入最低位
end
endmodule
2. 并行转串行
思路是:先将八位数据暂存于一个四位寄存器器中,然后左移输出到一位输出端口,这里通过一个“移位”指令,使能信号en表示开始进行并行到串行的转换文章来源地址https://www.toymoban.com/news/detail-790736.html
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, negedge rst_n)begin
if(!rst_n)
data_buf<=8'd0;
else if(en)
data_buf<=data_i;
else
data_buf<=data_buf<<1;//未使能就移位,先输出最高位
end
assign data_o=data_buf[7];
endmodule
到了这里,关于Verilog之串并转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!