微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 哪位大神有FPGA的RS编码器的源程序呀

哪位大神有FPGA的RS编码器的源程序呀

时间:10-02 整理:3721RD 点击:
基于FPGA的RS(15,11)编码器的实现,类似程序也行啊,。急需呀。给个呗

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY D_FF IS
        PORT
        (       
                D,CP:IN std_logic;--D为数据输入,CP为时钟,上升沿触发
                Rd,Sd:IN std_logic; --Rd为异步复位信号,Sd为异步置位信号
                Q,Qn:OUT std_logic --输出信号,是两个互补输出
        );
END D_FF;
ARCHITECTURE behave OF D_FF IS
BEGIN
        PROCESS(CP,Rd,Sd)
        BEGIN
                IF (Rd='0' AND Sd='1') THEN--功能表第一条
                        Q<='0';
                        Qn<='1';
                ELSIF (Rd='1' AND Sd='0') THEN--功能表第二条
                        Q<='1';
                        Qn<='0';
                ELSIF (Rd='0' AND Sd='0') THEN--功能表没有这条,要注意
                        Q<='X';
                        Qn<='X';
                ELSE                                                --功能表第四和第五条,即Rd='1' AND Sd='1'
                        IF (rising_edge(CP)) THEN
                                Q<=D;
                                Qn<=NOT D;
                        END IF;
                END IF;
        END PROCESS;
END behave;

这是个D触发器

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY D_FF IS
        PORT
        (       
                D,CP:IN std_logic;--D为数据输入,CP为时钟,上升沿触发
                Rd,Sd:IN std_logic; --Rd为异步复位信号,Sd为异步置位信号
                Q,Qn:OUT std_logic --输出信号,是两个互补输出
        );
END D_FF;
ARCHITECTURE behave OF D_FF IS
BEGIN
        PROCESS(CP,Rd,Sd)
        BEGIN
                IF (Rd='0' AND Sd='1') THEN--功能表第一条
                        Q<='0';
                        Qn<='1';
                ELSIF (Rd='1' AND Sd='0') THEN--功能表第二条
                        Q<='1';
                        Qn<='0';
                ELSIF (Rd='0' AND Sd='0') THEN--功能表没有这条,要注意
                        Q<='X';
                        Qn<='X';
                ELSE                                                --功能表第四和第五条,即Rd='1' AND Sd='1'
                        IF (rising_edge(CP)) THEN
                                Q<=D;
                                Qn<=NOT D;
                        END IF;
                END IF;
        END PROCESS;
END behave;

我有D触发器的源程序

module frs(clk,rst_n,x,y
    );
         input    clk;
         
         input    rst_n;
         
         input   [3:0] x;
         
         output    [3:0] y;
         
parameter         idle=2'b00;
parameter              second=2'b01;
parameter         third=2'b10;
parameter                   forth=2'b11;
         
reg [1:0] state;

reg  [3:0] D1;
  // reg  [3:0]  x_in;
//reg [3:0] cnt;
always@(posedge clk  or negedge rst_n)
                                       begin
if(!rst_n)
begin
cnt<=4'b0000;
D1<=4'b1101;
state<=idle;
end
      else
                                 
case(state)
idle:
begin
D1[0]<=x[3]^D1[3];
D1[1]<=D1[0];
D1[2]<=D1[1]^x[3];
D1[3]<=D1[2]^x[3];
state<=second;
end

second:
begin
D1[0]<=x[2]^D1[3];
D1[1]<=D1[0];
D1[2]<=D1[1]^x[2];
D1[3]<=D1[2]^x[2];
state<=third;
end

third:
begin
D1[0]<=x[1]^D1[3];
D1[1]<=D1[0];
D1[2]<=D1[1]^x[1];
D1[3]<=D1[2]^x[1];
state<=forth;
end

forth:
begin
D1[0]<=x[0]^D1[3];
D1[1]<=D1[0];
D1[2]<=D1[1]^x[0];
D1[3]<=D1[2]^x[0];
end
default:state<=idle;


endcase

                                       end
         
        assign y=D1;
         
         

endmodule  

你解决了吗?我现在还不会

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top