Verilog 并行数据流转换为一种特殊串行数据流模块的设计

该博客介绍了如何使用Verilog设计一个将并行数据流转换为特殊串行数据流的模块。它包含了两个关键模块:M1将并行数据转换为串行数据,而M2则接收串行数据并输出高16位。设计涵盖了状态机、数据缓冲和串行数据的处理过程。
摘要由CSDN通过智能技术生成

模块M0

`timescale 1ns/100ps
`define clk_cyc    50
module sigdata(rst,data,sclk,ack);
input        ack;
output        rst;
output    [3:0]    data;
output        sclk;
reg        rst;
reg        sclk;
reg    [3:0]    data;

initial 
begin
    rst <= 1;
    #10rst=0;
    #(`clk_cyc*2+3)rst=1;

end
initial
begin
    sclk = 0;
    data = 0;
    #(`clk_cyc * 1000) $stop;
end
always #(`clk_cyc) sclk = ~sclk;
always @(posedge ack)
begin
    #(`clk_cyc/2+3) data = data+1;
end
endmodule
 

模块M1
module ptosda(rst,sclk,data,ack,scl,sda);
input         rst,sclk;
input    [3:0]    data;                //并行口数据输入
output        ack;                //请求新的转换数据
output        scl;                
output        sda;                //定义SDA为单向的串行输出
reg        ack;
reg        scl;
reg        link_sda;
reg        sdabuf;
reg    [3:0]    databuf;
reg    [7:0]    state;

assign    sda = link_sda?sdabuf:1'b0;        //link_sda控制sdabuf输出到串行总线上

parameter     ready    = 8'b0000_0000,
        start    = 8'b0000_0001,
        bit3    = 8'b0000_0010,
        bit2    = 8'b0000_0100,
        bit1    = 8'b0000_1000,
        bit0    = 8'b0001_0000,
        prestop    = 8'b0010_0000,
        stop    = 8'b0100_0000,
        idle    = 8'b1000_0000;

always@(posedge sclk or negedge rst

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值