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

📄 alt_avalonst_pfc_0.v

📁 ddc的vhdl源代码
💻 V
📖 第 1 页 / 共 2 页
字号:
            end   end      always @* begin      //----------------------------------------      // Data is Available for P2 if all of the      // inputs have data      p2_data_available = 1;	      if ( in0_beats_equals_out0_beats )               p2_data_available = 0;      if ( in0_beats_equals_out1_beats )               p2_data_available = 0;      //----------------------------------------      // upstream backpressure      p1_out0_in0_space_difference = p1_out0_in0_space_available - in0_space_used;      p1_out1_in0_space_difference = p1_out1_in0_space_available - in0_space_used;      //------	----------------------------------      // tofifo_out_ready is 1 if all the       // outfifo readys are 1.      tofifo_out_ready = 1;      if (~tofifo_out0_ready )         tofifo_out_ready = 0;      if (~tofifo_out1_ready )         tofifo_out_ready = 0;      //----------------------------------------      // Calculate new beats_used      p2_out0_new_beats_used = p2_out0_beats_used;      if (tofifo_out_ready && p2_data_available	)         p2_out0_new_beats_used = p2_out0_beats_used + 1;       p2_out1_new_beats_used = p2_out1_beats_used;      if (tofifo_out_ready && p2_data_available	)         p2_out1_new_beats_used = p2_out1_beats_used + 1;     end     // ----------------------------------------------------------------------   //| Main Output Counter   // ----------------------------------------------------------------------   always @ (negedge internal_reset_n, posedge clk) begin      if (!internal_reset_n) begin         p2_beat_counter <= 0;         p2_out0_valid <= 0;         p2_out0_startofpacket <= 0;         p2_out0_endofpacket <= 0;         p2_out0_empty <= 0;         p2_out0_beats_used <= 0;                  p2_out0_s0_select               <= 0;         p2_out0_s0_in0_rd_ptr    <= -2;          p2_out0_in0_space_available <= 15;         p2_out1_valid <= 0;         p2_out1_startofpacket <= 0;         p2_out1_endofpacket <= 0;         p2_out1_empty <= 0;         p2_out1_beats_used <= 0;                  p2_out1_s0_select               <= 0;         p2_out1_s0_in0_rd_ptr    <= -1;          p2_out1_in0_space_available <= 15;         p1_out0_valid <= 0;         p1_out0_startofpacket <= 0;         p1_out0_endofpacket <= 0;         p1_out0_empty <= 0;         p1_out0_s0_select   <= 0;          p1_out0_in0_space_available <= 15;         p1_out1_valid <= 0;         p1_out1_startofpacket <= 0;         p1_out1_endofpacket <= 0;         p1_out1_empty <= 0;         p1_out1_s0_select   <= 0;          p1_out1_in0_space_available <= 15;         p0_out0_valid <= 0;         p0_out0_startofpacket <= 0;         p0_out0_endofpacket <= 0;         p0_out0_empty <= 0;         p0_out0_s0_select   <= 0;          p0_out1_valid <= 0;         p0_out1_startofpacket <= 0;         p0_out1_endofpacket <= 0;         p0_out1_empty <= 0;         p0_out1_s0_select   <= 0;          tofifo_out0_valid <= 0;         tofifo_out0_data <= 0;         tofifo_out0_empty <= 0;         tofifo_out0_error <= 0;         tofifo_out0_endofpacket <= 0;         tofifo_out0_startofpacket <= 0;                           tofifo_out1_valid <= 0;         tofifo_out1_data <= 0;         tofifo_out1_empty <= 0;         tofifo_out1_error <= 0;         tofifo_out1_endofpacket <= 0;         tofifo_out1_startofpacket <= 0;                           in0_beats_equals_out0_beats <= 1;         in0_beats_equals_out1_beats <= 1;      end else begin         //----------------------------------------         // Cancel each valid once it's been taken.           // If p2_data_available is true, this might         // get overridden in the output stage.         tofifo_out0_valid <= 0;	         tofifo_out1_valid <= 0;	         //----------------------------------------         // p2 Stage - Before Memory         in0_beats_equals_out0_beats <= (in0_beats_available == p2_out0_new_beats_used );         p2_out0_beats_used <= p2_out0_new_beats_used;         in0_beats_equals_out1_beats <= (in0_beats_available == p2_out1_new_beats_used );         p2_out1_beats_used <= p2_out1_new_beats_used;	         if (p2_enable) begin            //----------------------------------------            // Update Counters                        p2_beat_counter <= p2_beat_counter + 1'b1;            if (p2_beat_counter == 0 )               p2_beat_counter <= 0;            //----------------------------------------            // The Main Event            p2_out0_startofpacket <= 0;            p2_out0_endofpacket <= 0;            p2_out0_empty <= 0;                        p2_out0_in0_space_available <= p2_out0_in0_space_available;            p2_out1_startofpacket <= 0;            p2_out1_endofpacket <= 0;            p2_out1_empty <= 0;                        p2_out1_in0_space_available <= p2_out1_in0_space_available;            case (p2_beat_counter)               0 : begin                  p2_out0_valid <= 1;                  p2_out0_startofpacket <= 1;                  p2_out0_endofpacket <= 1;                  p2_out0_empty <= 0;                  p2_out0_s0_select   <= 0;                                    p2_out0_s0_in0_rd_ptr <= p2_out0_s0_in0_rd_ptr + (2); // out0 beat 0, symbol 0 is "I": From input in0, beat 0, symbol 0 (position 0, readpointer 0)                   p2_out0_in0_space_available <= p2_out0_in0_space_available  + 2;                  p2_out1_valid <= 1;                  p2_out1_startofpacket <= 1;                  p2_out1_endofpacket <= 1;                  p2_out1_empty <= 0;                  p2_out1_s0_select   <= 0;                                    p2_out1_s0_in0_rd_ptr <= p2_out1_s0_in0_rd_ptr + (2); // out1 beat 0, symbol 0 is "Q": From input in0, beat 1, symbol 0 (position 1, readpointer 1)                   p2_out1_in0_space_available <= p2_out1_in0_space_available  + 2;               end // 0            endcase         end                  //----------------------------------------         // p1 Stage - After Memory         if (p1_enable) begin            p1_out0_valid <= p2_out0_valid;            p1_out0_startofpacket <= p2_out0_startofpacket;            p1_out0_endofpacket <= p2_out0_endofpacket;                        p1_out0_empty <= p2_out0_empty;            p1_out0_s0_select   <= p2_out0_s0_select;             p1_out0_in0_space_available <= p2_out0_in0_space_available;            p1_out1_valid <= p2_out1_valid;            p1_out1_startofpacket <= p2_out1_startofpacket;            p1_out1_endofpacket <= p2_out1_endofpacket;                        p1_out1_empty <= p2_out1_empty;            p1_out1_s0_select   <= p2_out1_s0_select;             p1_out1_in0_space_available <= p2_out1_in0_space_available;         end          //----------------------------------------         // p0 Stage - Post-memory registers         if (p0_enable) begin            p0_out0_valid         <= p1_out0_valid;            p0_out0_startofpacket <= p1_out0_startofpacket;            p0_out0_endofpacket   <= p1_out0_endofpacket;            p0_out0_empty         <= p1_out0_empty;            p0_out0_s0_select   <= p1_out0_s0_select;             p0_out1_valid         <= p1_out1_valid;            p0_out1_startofpacket <= p1_out1_startofpacket;            p0_out1_endofpacket   <= p1_out1_endofpacket;            p0_out1_empty         <= p1_out1_empty;            p0_out1_s0_select   <= p1_out1_s0_select;          end //if (p0_enable) begin	         //----------------------------------------         // Data Out Stage         if (tofifo_out_enable) begin            tofifo_out0_valid         <= p0_out0_valid;            tofifo_out0_startofpacket <= p0_out0_startofpacket;            tofifo_out0_endofpacket   <= p0_out0_endofpacket;            tofifo_out0_empty <= p0_out0_empty;                case ( p0_out0_s0_select )                  0 : tofifo_out0_data[15: 0] <= p0_out0_s0_in0_rd_data [15: 0]; // 0 16            endcase             tofifo_out1_valid         <= p0_out1_valid;            tofifo_out1_startofpacket <= p0_out1_startofpacket;            tofifo_out1_endofpacket   <= p0_out1_endofpacket;            tofifo_out1_empty <= p0_out1_empty;                case ( p0_out1_s0_select )                  0 : tofifo_out1_data[15: 0] <= p0_out1_s0_in0_rd_data [15: 0]; // 0 16            endcase           end // if (tofifo_out_ready) begin                  //----------------------------------------         // Error Output         if (tofifo_out0_error_reported)  begin            tofifo_out0_valid <= 0;         end 	     if (tofifo_out0_error[0] && tofifo_out0_valid && tofifo_out0_ready && tofifo_out0_endofpacket) begin            tofifo_out0_valid <= 0;         end         tofifo_out0_error[0] <= error_detected;	         if (tofifo_out1_error_reported)  begin            tofifo_out1_valid <= 0;         end 	     if (tofifo_out1_error[0] && tofifo_out1_valid && tofifo_out1_ready && tofifo_out1_endofpacket) begin            tofifo_out1_valid <= 0;         end         tofifo_out1_error[0] <= error_detected;	      end // ~reset   end // always   //----------------------------------------   // Error Reported   //----------------------------------------   always @ (negedge internal_reset_n, posedge clk) begin      if (!internal_reset_n) begin         tofifo_out0_error_reported <= 0;               tofifo_out1_error_reported <= 0;            end else begin 	     if (tofifo_out0_error[0] && tofifo_out0_valid && tofifo_out0_ready && tofifo_out0_endofpacket) begin            tofifo_out0_error_reported <= 1;         end 	     if (tofifo_out1_error[0] && tofifo_out1_valid && tofifo_out1_ready && tofifo_out1_endofpacket) begin            tofifo_out1_error_reported <= 1;         end      end // ~reset   end // always   // ---------------------------------------------------------------------   //| Output Buffers   // ---------------------------------------------------------------------   alt_avalonst_pfc_0_fifo_out0 fifo_out0     (        .clk       (clk),       .reset_n   (reset_n),       .in_ready (tofifo_out0_ready),       .in_valid (tofifo_out0_valid),             .in_data  ( {tofifo_out0_data,       	            tofifo_out0_startofpacket,       	            tofifo_out0_endofpacket,       	            tofifo_out0_error } ),       .out_ready (  fromfifo_out0_ready),       .out_valid (  fromfifo_out0_valid),             .out_data  ( {fromfifo_out0_data,       	             fromfifo_out0_startofpacket,       	             fromfifo_out0_endofpacket,       	             fromfifo_out0_error } )       );   alt_avalonst_pfc_0_fifo_out1 fifo_out1     (        .clk       (clk),       .reset_n   (reset_n),       .in_ready (tofifo_out1_ready),       .in_valid (tofifo_out1_valid),             .in_data  ( {tofifo_out1_data,       	            tofifo_out1_startofpacket,       	            tofifo_out1_endofpacket,       	            tofifo_out1_error } ),       .out_ready (  fromfifo_out1_ready),       .out_valid (  fromfifo_out1_valid),             .out_data  ( {fromfifo_out1_data,       	             fromfifo_out1_startofpacket,       	             fromfifo_out1_endofpacket,       	             fromfifo_out1_error } )       );   always @ (negedge reset_n, posedge clk) begin      if (!reset_n) begin         out0_valid <= 0;         out0_data <= 0;         out0_startofpacket <= 0;         out0_endofpacket <= 0;         out0_empty <= 0;         out0_error <= 0;         out1_valid <= 0;         out1_data <= 0;         out1_startofpacket <= 0;         out1_endofpacket <= 0;         out1_empty <= 0;         out1_error <= 0;      end else begin      if (out0_ready || !out0_valid) begin         out0_valid <= fromfifo_out0_valid;         out0_data <= fromfifo_out0_data;         out0_startofpacket <= fromfifo_out0_startofpacket;         out0_endofpacket <= fromfifo_out0_endofpacket;         out0_empty <= fromfifo_out0_empty;         out0_error <= fromfifo_out0_error;      end      if (out1_ready || !out1_valid) begin         out1_valid <= fromfifo_out1_valid;         out1_data <= fromfifo_out1_data;         out1_startofpacket <= fromfifo_out1_startofpacket;         out1_endofpacket <= fromfifo_out1_endofpacket;         out1_empty <= fromfifo_out1_empty;         out1_error <= fromfifo_out1_error;      end    end  end  always @* begin    fromfifo_out0_ready = out0_ready || !out0_valid;    fromfifo_out1_ready = out1_ready || !out1_valid;  end  endmodule

⌨️ 快捷键说明

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