win70xc000000d修复(win70xc000000f修复)
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修复)相关信息请关注本站。