⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rsencode.v

📁 RS编码的verilog源代码
💻 V
字号:

// Primitive polynomial(原始多项式) = D^5+D^2+1
// g11-g0:  30     11      15     12      18      3     19      25     31     10     24     31

module rsenc (clk, reset, enable, data, x, y,z);
	input [4:0] x;
	input clk, reset, enable, data;
	output [4:0] y,z;
	reg [4:0] y,z;

	wire [4:0] scale0, scale1, scale2, scale3, scale4, scale5 ;
	wire [4:0] scale6, scale7, scale8, scale9, scale10, scale11 ;
	
	reg [4:0] mem0, mem1, mem2, mem3, mem4, mem5 ;
	reg [4:0] mem6, mem7, mem8, mem9, mem10, mem11 ;
	reg [4:0] feedback(反馈);
	

    mul m0(31,feedback,scale0);
    mul m1(24,feedback,scale1);
    mul m2(10,feedback,scale2);
    mul m3(31,feedback,scale3);
    mul m4(25,feedback,scale4);
    mul m5(19,feedback,scale5);
    mul m6(3,feedback,scale6);
    mul m7(18,feedback,scale7);
    mul m8(12,feedback,scale8);
    mul m9(15,feedback,scale9);
    mul m10(11,feedback,scale10);
    mul m11(30,feedback,scale11);

	always @ (posedge clk or negedge reset)
	begin
		if (~reset)
		begin
			mem0 <= 0;
			mem1 <= 0;
			mem2 <= 0;
			mem3 <= 0;
			mem4 <= 0;
			mem5 <= 0;
			mem6 <= 0;
			mem7 <= 0;
			mem8 <= 0;
			mem9 <= 0;
			mem10 <= 0;
			mem11 <= 0;
		end
		else if (enable)
		begin
			mem11 <= mem10 ^ scale11;
			mem10 <= mem9 ^ scale10;
			mem9 <= mem8 ^ scale9;
			mem8 <= mem7 ^ scale8;
			mem7 <= mem6 ^ scale7;
			mem6 <= mem5 ^ scale6;
			mem5 <= mem4 ^ scale5;
			mem4 <= mem3 ^ scale4;
			mem3 <= mem2 ^ scale3;
			mem2 <= mem1 ^ scale2;
			mem1 <= mem0 ^ scale1;
			mem0 <= scale0;
		end
	end

	always @ (data or x or mem11)
		if (data) feedback = x ^ mem11;
		else feedback = 0;

	always @ (data or x or mem11)
		if (data) y = x;
		else y = mem11;
	always @ (data or x or mem11)
		if (data) z = mem11;
		else z = mem11;
endmodule

	
module mul(a, b, z);
input [4:0] a;
input [4:0] b;
output [4:0] z;
assign z[0] = b[0]&a[0]^b[1]&a[4]^b[4]&a[1]^b[2]&a[3]^b[3]&a[2]^b[4]&a[4];
assign z[1] = b[0]&a[1]^b[1]&a[0]^b[2]&a[4]^b[4]&a[2]^b[3]&a[3];
assign z[2] = b[0]&a[2]^b[2]&a[0]^b[1]&a[1]^b[1]&a[4]^b[4]&a[1]^b[2]&a[3]^b[3]&a[2]^b[3]&a[4]^b[4]&a[3]^b[4]&a[4];
assign z[3] = b[0]&a[3]^b[3]&a[0]^b[1]&a[2]^b[2]&a[1]^b[2]&a[4]^b[4]&a[2]^b[3]&a[3]^b[4]&a[4];
assign z[4] = b[0]&a[4]^b[4]&a[0]^b[1]&a[3]^b[3]&a[1]^b[2]&a[2]^b[3]&a[4]^b[4]&a[3];
endmodule


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -