一次输出8bitn4m序列Simulink仿真Verilog实现.docx

上传人:doc321 文档编号:13124468 上传时间:2021-12-15 格式:DOCX 页数:7 大小:1.04MB
返回 下载 相关 举报
一次输出8bitn4m序列Simulink仿真Verilog实现.docx_第1页
第1页 / 共7页
一次输出8bitn4m序列Simulink仿真Verilog实现.docx_第2页
第2页 / 共7页
一次输出8bitn4m序列Simulink仿真Verilog实现.docx_第3页
第3页 / 共7页
一次输出8bitn4m序列Simulink仿真Verilog实现.docx_第4页
第4页 / 共7页
一次输出8bitn4m序列Simulink仿真Verilog实现.docx_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《一次输出8bitn4m序列Simulink仿真Verilog实现.docx》由会员分享,可在线阅读,更多相关《一次输出8bitn4m序列Simulink仿真Verilog实现.docx(7页珍藏版)》请在三一文库上搜索。

1、1. 4阶m序列生成器一开始希望通过使用8个PN序列生成器并行实现,但是,每个生成器都不能得到后8个状态的值。由于后面的8bit PN序列,通过一个clk不可能通过状态转换实现,所以,只能通过计算得到利用Matlab计算得到后8位PN码与初始状态的关系,得到一个输出生成矩阵,使用生成矩阵与初始状态相乘,即可得到8位PN码同时,计算得到生成第8位PN码时移位寄存器的状态,得到一个初始值生成矩阵,使用此矩阵与初始状态相乘,即可得到生成第8位PN码时移位寄存器的状态,从而为下一次迭代提供初始状态。两个矩阵在PN码生成过程中保持不变,而初始状态得到不断更新,8位PN码不断输出。clc; clear;n

2、 = 4; % 4 orderbit = zeros(9,n2);bit(1,:) = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1;initial = 1 0 0 0; for i = 2:9 % generate polynimial, 1 + x + x4, =x + x4, bit(i,:) = mod( bit(i-1,1:n)+bit(i-1,3*n+1:4*n), 2), bit(i-1,1:3*n);endgenmatrix = bit(2:9,3*n+1:4*n) % generate matrix remain the same for j = 1:1 m

3、seq = mod(genmatrix*initial', 2) % Update initial temp = initial; for k = 1:n initial(k) = mod( sum(bit(9,(k-1)*n+1:k*n)*temp'), 2); endend输出生成矩阵为:genmatrix = 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0初始状态值生成矩阵为:gm_init = 1 1 0 1 1 0 1 0 0 1 0 1 1 1 1 0Verilog代码:timescal

4、e 1ns / 1ps/ Company: / Engineer: / / Create Date: 15:24:21 05/01/2012 / Design Name: / Module Name: PNcode8bit /module PNcode8bit( clk, rst, init, PNout );/ PN code n = 4, f(x) = 1 + x + x4/ Output 8 bit per clkparameter order = 4;input clk;input rst;outputorder-1 : 0init;output 7 : 0PNout;/ Output

5、 use registerreg 7 : 0PNout = 0;regorder-1 : 0init = 0;/ Generate matrix of output, use memoryregorder-1 : 0gm_out7 : 0;/ Generate matrix of initial state, use memoryregorder-1 : 0gm_init3 : 0;integer i, j;/ Memory initialization here, generate by Matlabinitialbegin$readmemb("gm_out.txt",

6、gm_out, 7, 0);$readmemb("gm_init.txt", gm_init, 3, 0);end/always (posedge clk)if(rst = 1)beginPNout <= 8'b0;init <= 4'b1000;endelsebeginfor(i=0; i<8; i=i+1)PNouti <= (gm_outi3 & init3) (gm_outi2 & init2) (gm_outi1 & init1) (gm_outi0 & init0);for(j=0; j&l

7、t;4; j=j+1)initj <= (gm_initj0 & init0) (gm_initj1 & init1) (gm_initj2 & init2) (gm_initj3 & init3);endendmodule说明:1. 使用readmemb实现存储器数据的初始化,读取二进制内容,因为两个生成矩阵会比较大$readmemb("gm_out.txt", gm_out, 7, 0);"gm_out.txt"为读取的文件,gm_out为存放的存储器名字,7, 0为起始地址和结束地址,最好注明地址范围,不注明好

8、像不太确定2. 按位与、按位异或 实现二进制矩阵乘法第一个for是输出生成矩阵(8x4)与初始值(4x1)相乘,得到8bit PN码的输出第二个for是初始状态值生成矩阵(4x4)与初始值(4x1)相乘,得到新的初始值gm_out.txt内容:没有空格00100100100010011011111101111110gm_init.txt内容:没有空格1101101001011110测试文件代码:timescale 1ns / 1ps/ Company: / Engineer:/ Create Date: 16:27:38 05/01/2012/ Design Name: PNcode8bit/

9、 Module Name: E:/me/CAST/Project/FPGAcomm/PNcode8bit/PNcode8bit_tb.v/ Project Name: PNcode8bit/ /module PNcode8bit_tb;/ Inputsreg clk;reg rst;/ Outputswire 3:0 init;wire 7:0 PNout;/ Instantiate the Unit Under Test (UUT)PNcode8bit uut (.clk(clk), .rst(rst), .init(init), .PNout(PNout);initial begin/ Initialize Inputsclk = 0;rst = 1;/ Wait 100 ns for global reset to finish#100;rst = 0; / Add stimulus hereendalways beginforever #10 clk = !clk;endendmoduleModelSim仿真结果局部放大图,绿色竖线为周期间隔,一个周期的PN码为:00107 / 7文档可自由编辑打印

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1