`timescale 1ns / 1ns ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 2019/11/18 23:18:07 // Design Name: // Module Name: CNU_6din // Project Name: // Target Devices: // Tool Versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // ////////////////////////////////////////////////////////////////////////////////// module CNU_6din #(parameter WIDTH = 4'd8) (//输入数据个数为10的行更新模块,包括符号更新 input clk, input [WIDTH-1:0] din01_VN_RU, //变量节点信息输入 input [WIDTH-1:0] din02_VN_RU, //变量节点信息输入 input [WIDTH-1:0] din03_VN_RU, //变量节点信息输入 input [WIDTH-1:0] din04_VN_RU, //变量节点信息输入 input [WIDTH-1:0] din05_VN_RU, //变量节点信息输入 input [WIDTH-1:0] din06_VN_RU, //变量节点信息输入 output reg [WIDTH-1:0] dout01_RU=8'd0, //更新输出 output reg [WIDTH-1:0] dout02_RU=8'd0, //更新输出 output reg [WIDTH-1:0] dout03_RU=8'd0, //更新输出 output reg [WIDTH-1:0] dout04_RU=8'd0, //更新输出 output reg [WIDTH-1:0] dout05_RU=8'd0, //更新输出 output reg [WIDTH-1:0] dout06_RU=8'd0 //更新输出 ); //输出相对输入延时9个clk reg [WIDTH-1:0] abs01=8'd0,abs01_reg0=8'd0,abs01_reg1=8'd0,abs01_reg2=8'd0,min_level_1_01=8'd0; reg [WIDTH-1:0] abs02=8'd0,abs02_reg0=8'd0,abs02_reg1=8'd0,abs02_reg2=8'd0,min_level_1_02=8'd0; reg [WIDTH-1:0] abs03=8'd0,abs03_reg0=8'd0,abs03_reg1=8'd0,abs03_reg2=8'd0,min_level_1_03=8'd0; reg [WIDTH-1:0] abs04=8'd0,abs04_reg0=8'd0,abs04_reg1=8'd0,abs04_reg2=8'd0,min_level_1_04=8'd0; reg [WIDTH-1:0] abs05=8'd0,abs05_reg0=8'd0,abs05_reg1=8'd0,abs05_reg2=8'd0,min_level_1_05=8'd0; reg [WIDTH-1:0] abs06=8'd0,abs06_reg0=8'd0,abs06_reg1=8'd0,abs06_reg2=8'd0,min_level_1_06=8'd0; wire [WIDTH-1:0] min_level_2_01,min_level_2_02,min_level_3_01,min_level_3_02; always @ (posedge clk) begin//求输入数据的绝对值过程 if(din01_VN_RU[WIDTH-1]) abs01 <= ~din01_VN_RU + 8'd1;else abs01 <= din01_VN_RU; if(din02_VN_RU[WIDTH-1]) abs02 <= ~din02_VN_RU + 8'd1;else abs02 <= din02_VN_RU; if(din03_VN_RU[WIDTH-1]) abs03 <= ~din03_VN_RU + 8'd1;else abs03 <= din03_VN_RU; if(din04_VN_RU[WIDTH-1]) abs04 <= ~din04_VN_RU + 8'd1;else abs04 <= din04_VN_RU; if(din05_VN_RU[WIDTH-1]) abs05 <= ~din05_VN_RU + 8'd1;else abs05 <= din05_VN_RU; if(din06_VN_RU[WIDTH-1]) abs06 <= ~din06_VN_RU + 8'd1;else abs06 <= din06_VN_RU; end always @ (posedge clk) begin//对绝对值流水延时 abs01_reg0 <= abs01; abs01_reg1 <= abs01_reg0; abs01_reg2 <= abs01_reg1; abs02_reg0 <= abs02; abs02_reg1 <= abs02_reg0; abs02_reg2 <= abs02_reg1; abs03_reg0 <= abs03; abs03_reg1 <= abs03_reg0; abs03_reg2 <= abs03_reg1; abs04_reg0 <= abs04; abs04_reg1 <= abs04_reg0; abs04_reg2 <= abs04_reg1; abs05_reg0 <= abs05; abs05_reg1 <= abs05_reg0; abs05_reg2 <= abs05_reg1; abs06_reg0 <= abs06; abs06_reg1 <= abs06_reg0; abs06_reg2 <= abs06_reg1; end reg [WIDTH-1:0] min_level_1_05_reg0=8'd0,min_level_1_06_reg0=8'd0; always @ (posedge clk) begin min_level_1_05_reg0 <= min_level_1_05; min_level_1_06_reg0 <= min_level_1_06; end always @ (posedge clk) begin//第1级分类,两两一组将最小及次小值分开 min_level_1_01 <= (abs01