这篇文章写一下今天早上设计的并行数据到串行数据的转换器,也算是对并行总线和串行总线一个小小的应用,编码过程中也用到了task。
该转换器主要实现的功能是:
1、把并行地址存入寄存器
2、把并行数据存入寄存器
3、连接串行单总线
4、地址的串行输出
5、数据的串行输出
6、挂起串行单总线
7、给信号源应答
8、让信号源给出下一个操作对象
9、结束写操作
该设计利用嵌套的状态机实现,主状态机分为四个状态:idle,addr_write,data_write,stop,主状态机中会涉及到任务shift8out的调用,该任务主要实现并行数据到串行数据的转换,也是由一个状态机实现。下面给出整个设计的代码:
设计代码:
///并串转换器//
module ps_convertor(clk,rst,data,addr,sda,ack);
parameter idle=4'b0001,addr_write=4'b0010,data_write=4'b0100,stop=4'b1000;//独热编码
parameter sh8_start=9'b00000_0001;
parameter bit6 =9'b00000_0010;
parameter bit5 =9'b00000_0100;
parameter bit4 =9'b00000_1000;
parameter bit3 =9'b00001_0000;
parameter bit2 =9'b00010_0000;
parameter bit1 =9'b00100