Mortimer 发表于 2014-4-8 15:12:54

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

M序列的周期应该是2^n-1,我参照网上的m序列程序写了一个10阶的m序列,但是仿真了一下发现周期并不是计算的1023,测了一个大概是60.不知道为什么?附代码,求解释!

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

haley 发表于 2014-4-8 16:32:04

修改成这样试试看if(rst==1)                         register<=10'b1111111111;

金牛AKI 发表于 2014-4-8 18:15:50

试试楼上的方法看看

Borden 发表于 2014-4-8 18:25:35

always @(posedge clk, posedge rst)

常见错误~

haley 发表于 2014-4-8 20:09:31

Borden 发表于 2014-4-8 18:25
always @(posedge clk, posedge rst)

常见错误~

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

Borden 发表于 2014-4-8 20:31:54

haley 发表于 2014-4-8 20:09
这个不能算错误吧,他写的是同步复位,你写的是异步复位。

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

Fourier00 发表于 2014-4-8 21:42:59

register<={register^register,register};

haley 发表于 2014-4-8 22:26:25

一位二进制加法和异或是一样的结果。

Mortimer 发表于 2014-4-9 09:34:45

haley 发表于 2014-4-8 16:32
修改成这样试试看if(rst==1)                         register

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

haley 发表于 2014-4-9 11:23:11

你按照这张图上的电路修改一下代码测试一下周期是多少,这个是9位,这个图肯定没有问题,复位的时候都置一。

Mortimer 发表于 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 m_out;
reg register;
assign m_out=register;
always @(posedge clk)
        begin
       if(rst==1)
                        register<=10'b1111111111;
       else
       register<={register^register,register};
        end
endmodule

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

非常谢谢你的回答!

sungngai 发表于 2014-4-24 11:32:22

Mortimer 发表于 2014-4-9 15:31
经过测试,你给我的这个图示正确的,周期是20440/40=511=2^9-1。

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

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

sme 发表于 2014-4-24 12:45:04

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

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

Mortimer 发表于 2014-4-29 10:26:08

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

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

7802848 发表于 2014-4-29 14:42:20

Borden 发表于 2014-4-8 18:25
always @(posedge clk, posedge rst)

常见错误~

这是systemverilog支持的,好像新版的verilog也支持
页: [1]
查看完整版本: verilog写得m序列不知道周期为什么不对?