Aurora测试----随机数字产生
在xilinx模板中,存在一个Aurora样本工程,包含众多的子函数,本系列本文将逐一对其进行解析,首先是aurora_8b10b_0_FRAME_GEN函数,根据官方的说明,其作用是:该模块是一个模式生成器,用于在硬件上测试激光设计。它生成数据并将其通过激光通道。如果连接到帧接口,它将生成不同大小和间隔的帧。LFSR用于产生伪随机数据,LFSR的低位连接到REM总线。
REM在此处的含义应该是remaining,其输出接到下一个模块的LL_IP_REM接口,根据其数值令TKKP为10 or 11,是的产后是呢过的数据更加随机。
1、复位管理模块
//*********************************Main Body of Code********************************** always @ (posedge USER_CLK)
begin
if(RESET)
channel_up_cnt <= `DLY 'd0;
else if(CHANNEL_UP)
if(&channel_up_cnt)
channel_up_cnt <= `DLY channel_up_cnt;
else
channel_up_cnt <= `DLY channel_up_cnt + 'b1;
else
channel_up_cnt <= `DLY 'd0;
end assign dly_data_xfer = (&channel_up_cnt); //Generate RESET signal when Aurora channel is not ready
assign reset_c = RESET || !dly_data_xfer;
RESET为模块复位输入信号,除此之外,aurora ip还会产生一个channel_up信号输出,该信号额官方含义为:Asserted when Aurora 8B/10B channel initialization is complete and the channel is ready for data transfer. tx_channel_up and rx_channel_up are only applicable to their respective simplex cores.,也就是当Aurora 8B/10B通道初始化完成且通道准备好进行数据传输时置一CHANNEL_UP。
当channel_up延时等待16个时钟,&channel_up_cnt表示各个位相与,即各个位为1,故此处就是让帧数据生成单元延时复位操作。
2、生成随机数据模块
就是一个LFSR(linear feedback shift register,线性反馈移位寄存器),生成有顾虑的随机数
//______________________________ Transmit Data __________________________________
//Generate random data using XNOR feedback LFSR
always @(posedge USER_CLK)
if(reset_c)
begin
data_lfsr_r <= `DLY 'hABCD; //random seed value
end
else if(!TX_DST_RDY_N && !idle_r)
begin
data_lfsr_r <= `DLY {!{data_lfsr_r[]^data_lfsr_r[]^data_lfsr_r[]^data_lfsr_r[]},
data_lfsr_r[:]};
end
其仿真(modelsim)结果为

3、帧数据计数器与发送数据个数计数器
官方架构中使用了两个always块,一个always块产生每一帧数据发送的最大数据个数,然后另一个always块计数已发送的数据个数,当两个计数器的数值相等时代表一帧数据发送完毕。
代码:
//Use a counter to determine the size of the next frame to send
always @(posedge USER_CLK)
if(reset_c)
frame_size_r <= `DLY 'h00;
else if(single_cycle_frame_r || eof_r)
frame_size_r <= `DLY frame_size_r + ; //Use a second counter to determine how many bytes of the frame have already been sent
always @(posedge USER_CLK)
if(reset_c)
bytes_sent_r <= `DLY 'h00;
else if(sof_r)
bytes_sent_r <= `DLY 'h01;
else if(!TX_DST_RDY_N && !idle_r)
bytes_sent_r <= `DLY bytes_sent_r + ;
此外,在数据的传输过程中,使用计数器产生一个ifg_size_r,使得ifg_size_c每个15个时钟产生一个时钟的高电平,这个信号控制个控制值信号的刷新频率。(个人理解)
//Use a freerunning counter to determine the IFG
always @(posedge USER_CLK)
if(reset_c)
ifg_size_r <= `DLY 'h0;
else
ifg_size_r <= `DLY ifg_size_r + ; //IFG is done when ifg_size register is 0
assign ifg_done_c = (ifg_size_r == 'h0);
4、独热码状态机
本always块控制着状态的转移,状态输出信号控制这信号的发送(主要是生成了Tlast和Tvalid信号)
//State registers for 1-hot state machine
always @(posedge USER_CLK)
if(reset_c)
begin
idle_r <= `DLY 'b1;
single_cycle_frame_r <= `DLY 'b0;
sof_r <= `DLY 'b0;
data_cycle_r <= `DLY 'b0;
eof_r <= `DLY 'b0;
end
else if(!TX_DST_RDY_N)
begin
idle_r <= `DLY next_idle_c;
single_cycle_frame_r <= `DLY next_single_cycle_frame_c;
sof_r <= `DLY next_sof_c;
data_cycle_r <= `DLY next_data_cycle_c;
eof_r <= `DLY next_eof_c;
end
idle_r=0表示空闲状态,不进行数据传输,idle=0表示一帧数据,single_cycle_frame_r表示一帧新的数据准备好开始传输,sof_r表示开始一帧数据的开始,data_cycyle_r表示正在进行数据传输,eof_r表示数据传输结束。
//Nextstate logic for 1-hot state machine
assign next_idle_c = !ifg_done_c &&
(single_cycle_frame_r || eof_r || idle_r); assign next_single_cycle_frame_c = (ifg_done_c && (frame_size_r == )) &&
(idle_r || single_cycle_frame_r || eof_r); assign next_sof_c = (ifg_done_c && (frame_size_r != )) &&
(idle_r || single_cycle_frame_r || eof_r); assign next_data_cycle_c = (frame_size_r != bytes_sent_r) &&
(sof_r || data_cycle_r); assign next_eof_c = (frame_size_r == bytes_sent_r) &&
(sof_r || data_cycle_r);
使用杜热码的形式进行状态机切换,根据所处状态生成last和valid信号
Aurora测试----随机数字产生的更多相关文章
- 利用JavaScript生成随机数字!
		
<!DOCTYPE html> <html> <head> <title>1-99的随机数字</title> <script type ...
 - 关于随机数字K线极值的统计结果
		
如果有组随机数字,如数字彩票.我们对号码进行平均二分后,统计期出现的结果分布,对结果分布进行K线累加,得到一条折线. 这条折线的顶点和底点的统计上服从以下规则: 令总期数为N,统计区间为M,则在N期内 ...
 - 算法战斗:给定一个号码与通配符问号W,问号代表一个随机数字。 给定的整数,得到X,和W它具有相同的长度。 问:多少整数协议W的形式和的比率X大?
		
如果说: 给定一个号码与通配符问号W,问号代表一个随机数字. 给定的整数,得到X,和W它具有相同的长度. 问:多少整数协议W的形式和的比率X大? 进格公式 数据的多组,两排各数据的,W,第二行是X.它 ...
 - 随机总数字里面选取随机数字进行随机排序案例(JAVA实现)
		
随机总数字里面选取随机数字进行随机排序案例,案例如下: 代码code: package com.sec; import java.util.Arrays; import java.util.Scann ...
 - Java随机字符串:随机数字字符串,工具类
		
Java中生成随机数,字符串的工具类 1. 调用方法需要传入生成字符串的长度和需要的类型 生成随机数字 生成随机字母字符串 生成随机字符串+数字等 ......... 2. 总共8种类型,具体看工具类 ...
 - 使用js Math.random()函数生成n到m间的随机数字
		
何使用js生成n到m间的随机数字,主要目的是为后期的js生成验证码做准备,Math.random()函数返回0和1之间的伪随机数 摘要: 本文讲解如何使用js生成n到m间的随机数字,主要目的是为后 ...
 - php实现随机数字、字母的验证码
		
php实现随机数字.字母的验证码 可自定义生成验证码文字的大小.数量.干扰项等等,也可以自定义验证文字的字体... 废话不多说,直接上代码: 1.classgd.class.php <?php ...
 - java生成6位随机数字
		
//生成6位随机数字 System.out.println((int)((Math.random()*9+1)*100000)); //生成5位随机数字 System.out.println((int ...
 - Mysql 生成不重复的随机数字
		
在网上查找Mysql 生成不重复的随机数字 ,竟然没找到合适的例子. 其实思路很简单,利用MySQL现有的函数,然后进行加工处理,达到预期的结果.可以用到的MySQL函数为rand() ,以及 rou ...
 
随机推荐
- NOIP2017 D1T1 小凯的疑惑
			
洛谷P3951 看到题目,很容易想到这一题是求使ax+by=c(a,b,c∈N)无非负整数解的最大c 由裴蜀定理可知方程一定有整数解(a,b互素,gcd(a,b)=1|c) 解法一:暴力枚举 看到题目 ...
 - sql中count(1)和count(*)有区别吗
			
count(*) 对 innodb 而言,它需要把数据从磁盘中读取出来然后累计计数:而 MyISAM 引擎把一个表的总行数存在了磁盘上,所以执行 count(*) 会直接返回这个数,如果有 where ...
 - 【NOIP2013模拟联考6】选课
			
题目 你真的认为选课是那么容易的事吗?HYSBZ的ZY同志告诉你,原来选课也会让人产生一种想要回到火星的感觉.假设你的一周有n天,那么ZY编写的选课系统就会给你n堂课.但是该系统不允许在星期i和星期i ...
 - 安装vue-cli脚手架项目
			
1,下载安装node.官网下载后,重新打开cmd再打开. 命令:node -v检测版本. 2,安装vue-cli: 命令:npm install --global vue-cli .根据安装情况,会 ...
 - mysql RIGHT JOIN关键字 语法
			
mysql RIGHT JOIN关键字 语法 作用:RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行.惠州大理石 ...
 - 【PowerOJ1744&网络流24题】方格取数问题(最小割)
			
题意: n,m<=30 思路: [问题分析] 二分图点权最大独立集,转化为最小割模型,从而用最大流解决. [建模方法] 首先把棋盘黑白染色,使相邻格子颜色不同,所有黑色格子看做二分图X集合中顶点 ...
 - 6.25考试整理:江城唱晚&&不老梦&&棠梨煎雪——题解
			
按照旧例,先安利一下主要作者:一扶苏一 以及扶苏一直挂念的——银临姐姐:银临_百度百科 (滑稽) 好哒,现在步入正题: 先看第一题: 题解: 在NOIP范围内,看到“求方案数”,就说明这个题是一个计数 ...
 - (21)UML类图学习及使用
			
UML类图的学习和使用 1.参考博客http://www.uml.org.cn/oobject/201211231.asp
 - 阿里云配置通用服务的坑 ssh: connect to host 47.103.101.102 port 22: Connection refused
			
1.~ wjw$ ssh root@47.103.101.102 ssh: connect to host 47.103.101.102 port 22: Connection refused ssh ...
 - PHP代码修改后提交,无法立即生效
			
今天遇到一个坑爹的问题,就是我修改了PHP代码,提交到网站根目录以后,刷新浏览器居然无法立即生效,差不多得一分钟的样子再去刷新,才会看到更改后的效果. 出现这个问题的原因,是因为手头的项目需要较高的P ...