搜索
bottom↓
回复: 14

verilog写得m序列不知道周期为什么不对?

[复制链接]

出0入0汤圆

发表于 2014-4-8 15:12:54 | 显示全部楼层 |阅读模式
M序列的周期应该是2^n-1,我参照网上的m序列程序写了一个10阶的m序列,但是仿真了一下发现周期并不是计算的1023,测了一个大概是60.不知道为什么?附代码,求解释!

module msequ(clk,m_out,rst);
input clk;
input rst;
output [9:0] m_out;
reg [9:0] register;
assign m_out[9:0]=register[9:0];
always @(posedge clk)
        begin
         if(rst==1)
                        register[9:0]<=10'b1000000000;
         else
         register[9:0]<={register[0]+register[4],register[9:1]};
        end
endmodule

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2014-4-8 16:32:04 | 显示全部楼层
修改成这样试试看if(rst==1)                         register[9:0]<=10'b1111111111;

出0入0汤圆

发表于 2014-4-8 18:15:50 | 显示全部楼层
试试楼上的方法看看

出0入0汤圆

发表于 2014-4-8 18:25:35 | 显示全部楼层
always @(posedge clk, posedge rst)

常见错误~

出0入0汤圆

发表于 2014-4-8 20:09:31 | 显示全部楼层
Borden 发表于 2014-4-8 18:25
always @(posedge clk, posedge rst)

常见错误~

这个不能算错误吧,他写的是同步复位,你写的是异步复位。

出0入0汤圆

发表于 2014-4-8 20:31:54 | 显示全部楼层
haley 发表于 2014-4-8 20:09
这个不能算错误吧,他写的是同步复位,你写的是异步复位。

其实我也不大懂~ 我只知道如果用if,触发列表里面一定要有。如果列表里面没有,那么就只能用冒号结构写到赋值里面,否则综合出来肯定有问题~

出0入0汤圆

发表于 2014-4-8 21:42:59 | 显示全部楼层
register[9:0]<={register[0]^register[4],register[9:1]};

出0入0汤圆

发表于 2014-4-8 22:26:25 来自手机 | 显示全部楼层
一位二进制加法和异或是一样的结果。

出0入0汤圆

 楼主| 发表于 2014-4-9 09:34:45 | 显示全部楼层
haley 发表于 2014-4-8 16:32
修改成这样试试看if(rst==1)                         register[9:0]

还是不行,周期是2480ns我的仿真时钟周期是40ns,所以m序列的周期是2480/40=62个时钟周期。下面是仿真图~~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-4-9 11:23:11 | 显示全部楼层
你按照这张图上的电路修改一下代码测试一下周期是多少,这个是9位,这个图肯定没有问题,复位的时候都置一。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-4-9 15:31:32 | 显示全部楼层
本帖最后由 Mortimer 于 2014-4-9 15:56 编辑
haley 发表于 2014-4-9 11:23
你按照这张图上的电路修改一下代码测试一下周期是多少,这个是9位,这个图肯定没有问题,复位的时候都置一 ...


经过测试,你给我的这个图示正确的,周期是20440/40=511=2^9-1。

我之前的反馈弄错了,看本原多项式的时候顺序反了,导致了错误,正确的程序应该是:
module msequ(clk,m_out,rst);
input clk;
input rst;
output [9:0] m_out;
reg [9:0] register;
assign m_out[9:0]=register[9:0];
always @(posedge clk)
        begin
         if(rst==1)
                        register[9:0]<=10'b1111111111;
         else
         register[9:0]<={register[7]^register[0],register[9:1]};
        end
endmodule

经过实测,周期也正确了,是1023。

非常谢谢你的回答!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-4-24 11:32:22 | 显示全部楼层
Mortimer 发表于 2014-4-9 15:31
经过测试,你给我的这个图示正确的,周期是20440/40=511=2^9-1。

我之前的反馈弄错了,看本原多项式的时 ...

LZ 做的是高斯白噪声?网上很多方法都是用映射的方法将均匀分布转化为高斯分布,请问为什么可以这样转换?求赐教

出0入0汤圆

发表于 2014-4-24 12:45:04 | 显示全部楼层
Borden 发表于 2014-4-8 20:31
其实我也不大懂~ 我只知道如果用if,触发列表里面一定要有。如果列表里面没有,那么就只能用冒号 ...

你是来搞笑的吧?故意误导人家?

出0入0汤圆

 楼主| 发表于 2014-4-29 10:26:08 | 显示全部楼层
sungngai 发表于 2014-4-24 11:32
LZ 做的是高斯白噪声?网上很多方法都是用映射的方法将均匀分布转化为高斯分布,请问为什么可以这样转换 ...

我使用Matlab产生白噪声存到ROM中,用M序列产生地址去读取

出0入0汤圆

发表于 2014-4-29 14:42:20 | 显示全部楼层
Borden 发表于 2014-4-8 18:25
always @(posedge clk, posedge rst)

常见错误~

这是systemverilog支持的,好像新版的verilog也支持
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 02:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表