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

📄 dct.ttt

📁 arm7内核的verilog代码
💻 TTT
字号:
//dct.v
module dct( clk,  rst_b,  d_rdy,  start,  d_in,                     calc_done,  d_en,  d_out, w1_done, w2_done);
  input clk, rst_b, d_rdy;  wire clk, rst_b, d_rdy;
  input [1:0]start;
  wire [1:0]start;
  input [7:0]d_in;
  wire [7:0]d_in;
  output calc_done,d_en,w1_done, w2_done;
  reg  calc_done, d_en,w1_done, w2_done;
  output [18:0]d_out;
  wire [18:0]d_out;
      wire [7:0] q_1, q_2;   parameter NOP = 2'b00, IN_1 = 2'b01, IN_2 = 2'b10, CALC = 2'b11;  reg [1:0]  st_p, st_n;        // current maching state ,  next machine state  reg [5:0]  cnt1_p, cnt1_n, cnt2_p, cnt2_n ;   // counter for chip1 ,  chip2  reg cen1_p,wen1_p,cen1_n,wen1_n;    // ram1 select  and write  reg cen2_p,wen2_p,cen2_n,wen2_n;    // ram2 select  and  write  reg w2_done_n,  w1_done_n;  // ram writen  is over   reg calc_done_n;   // All of  64 data's  output is over   reg d_en_n;           // one data has caculated  reg [15:0] mul;   reg [18:0] mul_reg;  reg [2:0] count_i, count_j, count_k, count_mul;    wire [5:0] addr_1, addr_2;     always @(posedge clk )  begin        if(!rst_b) begin             st_p <= NOP;        end  else  begin             st_p <= st_n;         end   end     always @(posedge clk) begin       if (!rst_b)  begin             cen1_p  <= 1'b1;  wen1_p  <= 1'b0;    // control signal  for  RAM1             cen2_p  <= 1'b1;  wen2_p  <= 1'b0;   // control signal  for  RAM2             w1_done <= 1'b0;     // RAM1  have not be writen             w2_done <= 1'b0;     // RAM1  have not be writen             calc_done <= 1'b0;    // caculate has not over             cnt1_p <= 6'b000000;   // counter1              cnt2_p <= 6'b000000;   // counter2       end else begin             cen1_p  <= cen1_n;  wen1_p  <= wen1_n;                cen2_p  <= cen2_n;  wen2_p  <= wen2_n;                w1_done  <= w1_done_n;                  w2_done  <= w2_done_n;                  calc_done  <= calc_done_n;                cnt1_p <= cnt1_n;             cnt2_p <= cnt2_n;         end   end   always @(st_p or start or cnt1_p )  begin   //synopsys full_case parallel_case       st_n = NOP;       mul = 16'b0;       cen1_n  = 1'b1;  wen1_n  = 1'b0;    // control signal  for  RAM1       cen2_n  = 1'b1;  wen2_n  = 1'b0;   // control signal  for  RAM2       w1_done_n = 1'b0;     // RAM1  have not be writen       w2_done_n = 1'b0;     // RAM2  have not be writen       calc_done_n = 1'b0;    // caculate has not over       cnt1_n = 6'b000000;  cnt2_n = 6'b000000;       case (st_p)             2'b00:  begin                if( start==IN_1 )  begin                      st_n = IN_1;                end  else  if( start==IN_2 )  begin                      st_n = IN_2;                end  else  if( start==CALC )  begin                      st_n = CALC;                end else begin                      st_n = NOP;                 end            end            2'b01:  begin                 if( cnt1_n==6'd63 ) begin   // reture to NOP                      w1_done_n = 1'b1;    // RAM1  have be writen                 end else begin                      st_n = IN_1;                      cnt1_n = cnt1_p + 1'b1;                      cen1_n  = 1'b0;    // select RAM1                                                              end            end            2'b10:  begin                 if(cnt2_p==6'd63) begin   // reture to NOP                      w2_done_n = 1'b1;    // RAM2  have be writen                 end else begin                      st_n = IN_2;                      cen2_n  = 1'b0;    // select RAM1                      if(d_rdy==1'b1)  begin                          cnt2_n = cnt2_p + 1'b1;                      end else begin                          cnt2_n = cnt2_p;                      end                 end            end            2'b11:  begin                if ( (cnt2_p==6'd63) & (cnt1_p==6'd63 ) )  begin   // reture to NOP                      calc_done_n = 1'b1;    // RAM2  have be writen                 end else begin                      st_n = CALC;                      cen1_n  = 1'b0;    // select RAM1                      cen2_n  = 1'b0;    // select RAM2                      wen1_n  = 1'b1;    // read RAM2                      wen2_n  = 1'b1;    // read RAM2                 end                mul = q_1 * q_2;                              end       endcase   end    assign   d_out = mul;  assign  addr_1 = cnt1_p;   assign  addr_2 = cnt2_p;   sram_64X8	u01_sram_64X8 (.Q(q_1),.CLK(clk),.CEN(cen1_p),.WEN(wen1_p),.A(addr_1),.D({2'b00,addr_1}),.OEN(1'b0));  sram_64X8	u02_sram_64X8 (.Q(q_2),.CLK(clk),.CEN(cen2_p),.WEN(wen2_p),.A(addr_2),.D(d_in),.OEN(1'b0)); endmodule

⌨️ 快捷键说明

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