资源描述:
《EDAS设计DS1302》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、DS1302控制寄存器的设计一、总体的设计框图其中包括移位寄存器、计数器、控制器,各部分的引脚及功能如下:1)计数器加到16复为0,当n>=8时,n8变为1,否则为0。2)移位寄存器clk:时钟脉冲;n8:当n>=8时为1;rst:复位信号;indata:输入数据;z:选择dataio是作为输入口还是输出口;enwr:写入使能;n[4:0]:输入计数器的值;inone:输入命令字;dataout:数据输出;dataio:数据双向口;command0:命令字最低位;command6:命令字第六位;command7:命令字
2、第七位;command15:命令字第一道第五位;3)控制器command0:命令字最低位,若为1则读,若为0则写;command6:命令字第六位,若为1则存取RAM数据,若为0则存取日历时钟数据;command7:命令字第七位,若为0,则写保护;command15:命令字第一至五位,表示操作单元的地址;ram_wr:写ram;ram_rd:读ram;ck_rd:读时钟数据;ck_wr:写时钟数据;enwr:若en=0,则写保护;二、基本原理及算法流程图首先通过移位寄存器将控制字写入,通过计数器计数值判断是否已经写完8位
3、,然后控制器通过控制字来进行对数据的存取。三、各部分程序以及仿真1)计数器modulecountermy(sclk,rst,n,n8);inputsclk;inputrst;outputreg[4:0]n;outputregn8;always@(posedgesclk)beginif(rst==0)n<=0;elsebeginn<=n+1;if(n>=8)n8<=1;elsen8<=0;if(n==15)n<=0;endendendmodule2)移位寄存器modulereg_shift(clk,indata,z,da
4、taout,n8,enwr,dataio,rst,n,inone,command0,command6,command7,command15);inputclk;inputrst;input[4:0]n;inputinone;//输入一位命令字inputindata;inputz;//shuruhuoshuchuinputn8;inputenwr;outputregcommand0;outputregcommand6;outputregcommand7;outputreg[4:0]command15;outputregd
5、ataout;inoutdataio;regdataio2;regq;reg[7:0]command;assigndataio=(!z)?dataio2:1'bz;always@(posedgeclk)beginif(rst==0)command<=8'b0;elsebeginif(n<=8)command<={inone,command[7:1]};elseif(enwr==1)begincommand0<=command[0];command6<=command[6];command7<=command[7];co
6、mmand15<=command[5:1];if(command0==1)//写数据,数据进来dataout=dataio;endendendalways@(negedgeclk)beginif(n>=8)beginif(command0==0)//读数据,数据出去//if(command6==0)//存取日历时钟数据//else//存取RAM数据//dataout<={inone,dataout[7:1]};begin//dataio3<=dataio2;if(!z)begindataio2<=indata;//da
7、taout<=1'bz;endelsebegindataio2<=dataio;//dataout<=dataio2;end//dataio2<=dataio3;endendendendmodule3)控制器modulecontrol(command0,command6,command7,clk,rst,ram_wr,ram_rd,ck_wr,ck_rd,enwr);inputcommand0;inputcommand6;inputcommand7;inputclk;inputrst;outputregram_wr;o
8、utputregram_rd;outputregck_wr;outputregck_rd;outputregenwr;always@(posedgeclk)beginif(rst==0){ram_wr,ram_rd,ck_wr,ck_rd}<=4'b0;elseenwr<=0;case({command7,command6,com