win70xc000000d修复(win70xc000000f修复),本文通过数据整理汇集了win70xc000000d修复(win70xc000000f修复)相关信息,下面一起看看。

win70xce修复。

(win70xce修复引导)。

来源:创芯大讲堂。

创芯大讲堂:EETOP旗下在线教育平台,欢迎关注。

春节期间,EETOP分享了网友通过Vivado直接板级调试时钟用的PCIEIP输出的:春节快乐时序抓取图,纯粹的硬逻辑产生。如下图:

作者:CETC41-缪国锋。

实现原理:因为项目需要,需要在板子上完成PCIE接口的通信,还要完成两路AD,两路每日定额补给(每日津贴)的调试,还有四个颗粒的内存颗粒,来完成信号的收发,FPGA用的是XC7V690T,还有时钟芯片阿迪公司的AD9512的这些芯片多是用精力来控制寄存器,因此我在写寄存器的时候就想把寄存器的值换成节日祝福,应该挺有新意的,就从新例化了一个模块,每配置完一个寄存器自动跳转到下一个,直到所有寄存器配置完成结束,每一个寄存器位数为16位,每个汉字16个值,前后加0隔开,一共74个,时钟也可以根据需要分频更改。

经作者授权,现将实现代码公布给大家:

实现代码包含两个模块:

SPI _ 16位_控制器。五。

Spi _ Festival _ Config五。

SPI _ 16位_控制器。五。

`时间刻度一纳秒/1秒。

//////////////////////////////////////////////////////////////////////////////////。

//公司:

//工程师:

//创建日期:2019/01/2909:18:43 .

//设计名称:

//ModuleName:SPI _ 16 bit _ Controller。

//ProjectName:

//TargetDevices:

//工具版本:

//说明:

//依赖关系:

//修订版:

//版本0.01-文件已创建。

//附加内容:

//////////////////////////////////////////////////////////////////////////////////。

模块16位控制器。

inputclk_i,//SPI控制器时钟输入,

输入[15:0]spi_data,//SPI总线时钟信号并行输入。

inputspi_start,//启动传输。

inputrst_n,//SPI控制器复位信号。

(* mark _ debug= true *)inputspi _ miso,//SPI总线数据信号输入。

(* mark _ debug= true *)outputwirespi _ MoSi,//SPI总线数据信号输出。

(* mark _ debug= true *)outputwirespi _ sclk,//SPI总线时钟信号输出。

(* mark _ debug= true *)outputwirespi _ cs,//SPI总线片选信号输出。

outputregdata_end//传输结束标志。

//以下信号为测试信号。

(* mark _ debug= true *)reg[5:0]SD _ counter;//SPI数据发送计数器。

(* mark _ debug= true *)regspi _ SDO _ reg;//SPI控制器发送的串行数据。

(* mark _ debug= true *)regspi _ cs _ reg;

(* mark _ debug= true *)reg[15:0]SPI _ data _ reg;

赋值SPI _ sclk=(~ SPI _ cs _ reg)(((SD _ counter=2)(SD _ counter=18))?~ clk _ I:0);

assignspi _ mosi=spi _ sdo _ reg//如果输出数据为1、spi_SDAT设为高阻。

assignspi _ cs=spi _ cs _ reg .

//- SPI计数器。

always @(negedgerst _ norposedgeclk _ I)。

开始。

如果(!rst _ n)SD _ counter=6 b;

埃尔斯贝金。

if(spi_start==0)。

SD _ counter=0;

否则。

开始。

if(SD _ counter==6 b)。

SD _ counter=0;

否则。

SD _计数器=标清_计数器1;

结束。

结束。

结束。

always @(negedgerst _ norposedgeclk _ I)。

开始。

如果(!rst_n)。

beginspi _ cs _ reg=1 # b1spi _ sdo _ reg=1 # b0data _ end=1 # b1结束。

否则。

案例(sd_counter)。

6 #;d0:begin SPI _ cs _ reg=1 B1;data _ end=1 # b0spi _ sdo _ reg=1 # b0结束。

/////////////////////////////////////////////////////////////////.

6 #;D1:begin SPI _ cs _ reg=1 B1;spi _ data _ reg=spi _ data结束。

//发送从设备地址。

6 #;D2:begin SPI _ cs _ reg=1 B0;SPI _ SDO _ reg=SPI _ data _ reg[15];结束。

6 #;D3:begin SPI _ cs _ reg=1 B0;SPI _ SDO _ reg=SPI _ data _ reg[14];结束。

6 #;D4:begin SPI _ cs _ reg=1 B0;SPI _ SDO _ reg=SPI _ data _ reg[13];结束。

6 #;D5:begin SPI _ cs _ reg=1 B0;SPI _ SDO _ reg=SPI _ data _ reg[12];结束。

6 #;D6:begin SPI _ cs _ reg=1 B0;SPI _ SDO _ reg=SPI _ data _ reg[11];结束。

6 #;D7:begin SPI _ cs _ reg=1 B0;SPI _ SDO _ reg=SPI _ data _ reg[10];结束。

6 #;D8:begin SPI _ cs _ reg=1 B0;SPI _ SDO _ reg=SPI _ data _ reg[9];结束。

6 #;d9:begin SPI _ cs _ reg=1 B0;SPI _ SDO _ reg=SPI _ data _ reg[8];结束。

6 #;D10:begin SPI _ cs _ reg=1 B0;SPI _ SDO _ reg=SPI _ data _ reg[7];结束。

6 #;d11:begin SPI _ cs _ reg=1 B0;SPI _ SDO _ reg=SPI _ data _ reg[6];结束。

6 #;d12:begin SPI _ cs _ reg=1 B0;SPI _ SDO _ reg=SPI _ data _ reg[5];结束。

6 #;d13:begin SPI _ cs _ reg=1 B0;SPI _ SDO _ reg=SPI _ data _ reg[4];结束。

6 #;d14:begin SPI _ cs _ reg=1 B0;SPI _ SDO _ reg=SPI _ data _ reg[3];结束。

6 #;d15:begin SPI _ cs _ reg=1 B0;SPI _ SDO _ reg=SPI _ data _ reg[2];结束。

6 #;d16:begin SPI _ cs _ reg=1 B0;SPI _ SDO _ reg=SPI _ data _ reg[1];结束。

6 #;d17:begin SPI _ cs _ reg=1 B0;SPI _ SDO _ reg=SPI _ data _ reg[0];结束。

///////////////////////////////////////////////////////////.

6 #;d18:begin SPI _ cs _ reg=1 B0;spi _ sdo _ reg=1 # b0data _ end=1 # b0结束。

6 #;d19:begin SPI _ cs _ reg=1 B1;spi _ sdo _ reg=1 # b0data _ end=1 # b1结束。

默认值:beginspi _ cs _ reg=1 # b1spi _ sdo _ reg=1 # b0data _ end=1 # b0结束。

结局。

结束。

结束模块。

Spi _ Festival _ Configv代码。

`时间刻度一纳秒/1秒。

//////////////////////////////////////////////////////////////////////////////////。

//公司:

//工程师:

//创建日期:2019/01/2908:42:10 .

//设计名称:

//ModuleName:Spi _ Festival _ Config。

//ProjectName:

//TargetDevices:

//工具版本:

//说明:

//依赖关系:

//修订版:

//版本0.01-文件已创建。

//附加内容:

//////////////////////////////////////////////////////////////////////////////////。

moduleSpi_Festival_Config(。

输入时钟_i,//时钟输入。

inputrst_n,//复位信号。

输入[12:0]wr_addr,

输入[31:0]wr_data。

inputwr_en。

inputspi_miso,//SPI总线数据信号输入。

outputwirespi_sclk,//SPI总线时钟信号输出。

outputwirespi_mosi,//SPI总线数据信号。

outputwirespi_cs//SPI使能。

//内部寄存器及连线。

(* mark _ debug= true *)reg[15:0]SPI _ data _ reg;

(* mark _ debug= true *)regspi _ start;

(* mark _ debug= true *)wireSPI _ END;//寄存器并串转换结束标志位。

(* mark _ debug= true *)reg[15:0]reg _ data;

(* mark _ debug= true *)reg[7:0]addr _ index;

//时钟参数。

参数clk _ Freq=;//输入的系统时钟100兆赫。

参数SPI _ Freq=;//SPI总线时钟10兆赫。

//存储精力配置数据的查找表容量。

parameterLUT _ SIZE=72 .

(* mark _ debug= true *)寄存器[1:0]状态;

//statemachinecode。

localparamS _ IDLE=2 # b00 .

localparamS _ START=2 # b01//startbit。

localparamS _ STOP=2 # b10 .

//////100MHz时钟分频得到10兆赫的精力控制时钟//////。

(* mark _ debug= true *)reg[7:0]SPI _ clk _ div;

(* mark _ debug= true *)regspi _ ctrl _ clk;

总是@(posedgeclk_iornegedgerst_n)。

开始。

如果(!rst_n)。

开始。

SPI _ ctrl _ clk=0;

spi _ clk _ div=8 # h00 .

结束。

否则。

开始。

if(SPI _ clk _ div==(CLK _频率/SPI _频率-1#;b1))。

开始。

SPI _ clk _ div=0;

spi _ ctrl _ clk=~ spi _ ctrl _ clk .

结束。

否则。

SPI _ clk _ div=SPI _ clk _ div 1;

结束。

结束。

wireinitial _ en//触发信号,可使用单脉冲做触发源;

reginitial _ clr//初始化结束清零位;

regwr _ start _ en//初始化使能开始;

assign initial _ en=(wr _ addr==12 h 660 wr _ en);

总是@(posedgeclk_i)。

开始。

if(initial_clr)。

开始。

wr _ start _ en=1 # b0 .

结束。

elseif(initial_en)。

开始。

wr _ start _ en=1 # b1 .

结束。

结束。

//////////////////////配置过程控制///////////////////////。

始终@(posedgespi _ ctrl _ clkornegedgerst _ n)。

开始。

if(~rst_n)//复位。

开始。

addr _ index=0;

SPI _ start=0;

结束。

否则。

开始。

if(wr_start_en)。

开始。

如果(地址索引

开始。

案件(州).

S_IDLE:begin//第一步:准备数据,启动传输。

spi _ data _ reg=reg _ data .

spi _ start=1 # b1 .

状态=1 #;b1结束。

开始时间:

开始。

if(SPI_END)//第二步:检验传输是否正常结束。

开始。

状态=S _ STOP .

spi _ start=1 # b0 .

结束。

否则。

状态=S _ START .

结束。

S_STOP:begin//传输结束,改变LUT指数的值,准备传输下一个数据。

地址索引=地址索引1;

状态=S _ IDLE结束。

结局。

结束。

否则。

开始。

状态=S _ IDLE .

addr _ index=0;

initial _ clr=1 # b1 .

结束。

结束。

elseinitial _ clr=1 # b0 .

结束。

结束。

/////////////////////配置数据查找表//////////////////////////。

总是@(posedgeclk_i)。

开始。

案例(地址索引).

8 #;d00:begin reg _ data=16 h 0000结束。

8 #;d01:begin reg _ data=16 h 0000结束。

8 #;d02:begin reg _ data=16 h 0020结束。

8 #;d03:begin reg _ data=16 h 0020结束。

8 #;d04:begin reg _ data=16 h 0040结束。

8 #;d05:begin reg _ data=16 h 1140结束。

8 #;d06:begin reg _ data=16 h 1180结束。

8 #;d07:begin reg _ data=16 h15ff结束。

8 #;d08:begin reg _ data=16 h 1549结束。

8 #;d09:begin reg _ data=16 h7f 49结束。

8 #;D10:begin reg _ data=16 h7f 49结束。

8 #;d11:begin reg _ data=16 h 1549结束。

8 #;d12:begin reg _ data=16 h15ff结束。

8 #;d13:begin reg _ data=16 h 1180结束。

8 #;d14:begin reg _ data=16 h 1140结束。

8 #;d15:begin reg _ data=16 h 0040结束。

8 #;d16:begin reg _ data=16 h 0020结束。

8 #;d17:begin reg _ data=16 h 0020结束。

8 #;d18:begin reg _ data=16 h 0000结束。

8 #;d19:begin reg _ data=16 h 0000结束。

8 #;d20:begin reg _ data=16 h 0800结束。

8 #;d21:begin reg _ data=16 h 0800结束。

8 #;d22:begin reg _ data=16 h 0900结束。

8 #;d23:begin reg _ data=16 h 0900结束。

8 #;d24:begin reg _ data=16 h7f 00结束。

8 #;d25:begin reg _ data=16 h7f 00结束。

8 #;d26:begin reg _ data=16 h 0900结束。

8 #;d27:begin reg _ data=16 h09 ff结束。

8 #;d28:begin reg _ data=16 h09 ff结束。

8 #;d29:begin reg _ data=16 h 0900结束。

8 #;d30:begin reg _ data=16 h7f 20结束。

8 #;d31:begin reg _ data=16 h7f 20结束。

8 #;d32:begin reg _ data=16 h 0910结束。

8 #;d33:begin reg _ data=16 h09f 0;结束。

8 #;d34:begin reg _ data=16 h 0800结束。

8 #;d35:begin reg _ data=16 h 0800结束。

8 #;d36:begin reg _ data=16 h 0000结束。

8 #;d37:begin reg _ data=16 h 0000结束。

8 #;d38:begin reg _ data=16 h 0180结束。

8 #;d39:begin reg _ data=16 h0e 00结束。

8 #;d40:begin reg _ data=16 H7 fff结束。

8 #;d41:begin reg _ data=16 H7 fff结束。

8 #;d42:begin reg _ data=16 h0c 00结束。

8 #;d43:begin reg _ data=16 h 0443结束。

8 #;d44:begin reg _ data=16 h 0842结束。

8 #;d45:begin reg _ data=16 h084c结束。

8 #;d46:begin reg _ data=16 h 0858结束。

8 #;d47:begin reg _ data=16 h7fe 0;结束。

8 #;d48:begin reg _ data=16 h 0870结束。

8 #;d49:begin reg _ data=16 h084c结束。

8 #;d50:begin reg _ data=16 h 0846结束。

8 #;d51:begin reg _ data=16 h0fc 2;结束。

8 #;d52:begin reg _ data=16 h 0041结束。

8 #;d53:begin reg _ data=16 h 0040结束。

8 #;d54:begin reg _ data=16 h 0000结束。

8 #;d55:begin reg _ data=16 h 0000结束。

8 #;d56:begin reg _ data=16 h 0006结束。

8 #;d57:begin reg _ data=16 h3f8c结束。

8 #;d58:begin reg _ data=16 h 2098结束。

8 #;d59:begin reg _ data=16 h20b 0;结束。

8 #;d60:begin reg _ data=16 h 2081结束。

8 #;d61:begin reg _ data=16 h 2081结束。

8 #;d62:begin reg _ data=16 h 2083结束。

8 #;d63:begin reg _ data=16 h2ffe结束。

8 #;d64:begin reg _ data=16 h 2080结束。

8 #;d65:begin reg _ data=16 h 4080结束。

8 #;d66:begin reg _ data=16 h 4080结束。

8 #;d67:begin reg _ data=16 h 4098结束。

8 #;d68:begin reg _ data=16 h408c结束。

8 #;d69:begin reg _ data=16 h 4086结束。

8 #;D70:begin reg _ data=16 h 0000结束。

8 #;d71:begin reg _ data=16 h 0000结束。

默认值:beginreg _ data=16 # h0000结束。

结局。

结束。

//定义上位机单独配置寄存器的值,无需更改不用配置。

regpci _ write _ en .

reg[15:0]SPI _ data;

reg[7:0]wr _ en _ t;

总是@(posedgeclk_i)。

开始。

if(SPI_END)。

开始。

pci _ write _ en=1 # b0 .

结束。

else if(wr _ addr==12 h650wr_en)。

pci _ write _ en=1 # b1 .

结束。

总是@(posedgeclk_i)。

开始。

if(~rst_n)。

spi _ data=16 # h0000 .

否则。

开始。

if((wr _ addr[12:0]==13 h640)wr _ en)。

SPI _ data=wr _ data[15:0];

elseif(spi_start).

SPI _ data=SPI _ data _ reg[15:0];

结束了。

结束了。

电线电缆.

赋值SPI _ en=PCI _ write _ en | SPI _ start。

////例化SPI(SPI)控制器将16位并行数据完成并串转换///。

SPI _ 16位控制器SPI _ 16位控制器安装(。clk_i(spi_ctrl_clk)、//SPI控制器工作时钟。SPI _ sclk//SPI总线时钟信号。spi_miso,//SPI总线数据信号。SPI _ mosi//SPI总线数据信号。SPI _ cs//SPI总线使能信号。spi_data,//寄存器日期。日期。spi_start(spi_en),//启动传输。data_end(SPI_END),//传输结束标志。rst _ n/复位信号。

最终模块。

更多win70xc000000d修复(win70xc000000f修复)相关信息请关注本站。