打印

Verilog实现serial到parallel转换,以及parallel到serial转换

[复制链接]
2894|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lxAPP|  楼主 | 2012-10-8 22:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Verilog实现serial数据到parallel数据转换,以及parallel数据到serial数据转换
实际应用中,很多数据都以串行方式传输,如I2C,LVDS,mini_LVDS等,读出时串行数据转换成并行数据传输,因而并串转换电路是个常用的电路。并串转换电路实际上是移位寄存器(shift register)的原理.在这里讨论将串行数据转换为并行数据的电路模块,同时分析并行数据转换为串行数据的代码
并行parallel数据转换为串行serial数据的电路
module p2s(clk,reset,load,pi,so);
  input clk;
  input reset;
  input load;
  input[3:0] pi;
  output  so;
  
  reg[3:0]   result;
  
  
[email=always@(posedge]always@(posedge[/email] clk or negedge reset)
     if(!reset)
     result  <= 0;
     else if(load==1)                    // 当load信号为1,且在clk rising 时将并行数送到了register中
     result  <= pi;
   else
     result  <= {result,1'b0};          //设计中采用了位拼接运算符{},Verilog中有很多移位运算符,但以这种方式最为精简

  assign  so  = result[3];       // 寄存器register中的数据送到输出端口

endmodule
以下是testbench内容  :
module p2s_tb;
  reg clk;
  reg reset;
  reg load;
  reg[3:0] pi;
  
  wire  so;
  
  p2s ut(clk,reset,load,pi,so);
  
  initial begin
     $display($time,,"simulation is begining");
     reset  = 0;
     #10;
     reset = 1;
   end
  
  initial  clk = 1'b0;
  always  #10  clk = ~clk;
     
  initial begin
     load   = 1'b0;
     pi     = 4'b0;
     #10;
     load   = 1'b1;
     pi     = 4'b0101;
     #20;
     load   = 1'b0;
     pi     = 4'h0;  
   end

endmodule
以下为modelsim中的仿真波形


串进并出的代码如下:
module  s2p(clk,resetn,en,si,po);
  
  input clk;
  input resetn;
  input en;
  input si;
  output[3:0]  po;
  reg [8:0] r;
  
  
[email=always@(posedge]always@(posedge[/email] clk or negedge resetn)
     if(!resetn)
         r  <= 8'h0;
     else if(en)
         r  <={r,si};
  assign  po  = (en) ?  r  : 4'h0;
  
endmodule

以下是testbench内容
`timescale 1ns/1ns
module s2p_tb;
  reg clk;
  reg resetn;
  reg en;
  reg si;
  wire[3:0] po;
  
  s2p  ut(clk,reset,en,si,po);
  
  initial begin
     resetn = 0;
     #5;
     resetn = 1;
  end
  
  initial  clk = 0;
  always  #10 clk = ~clk;
  
  initial begin
     en = 0 ;
     si = 1 ;
     #10;
     si = 0;
     #20;
     en = 1;
     si = 1;
     #20;
     si = 0;
     #20;
     si = 1;
     #20;
     si = 0;
     #20;
     si = 1;
     #20;
     si = 0;
  end
endmodule

相关帖子

沙发
GoldSunMonkey| | 2012-10-9 21:03 | 只看该作者
:)缺结果文件。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

483

帖子

2

粉丝