`timescale 1ns / 1ns ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 2019/11/18 23:18:07 // Design Name: // Module Name: CNU_3din // Project Name: // Target Devices: // Tool Versions: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // ////////////////////////////////////////////////////////////////////////////////// module CNU_3din #(parameter WIDTH = 4'd8)( input clk, input [WIDTH-1:0] din01_VN_RU, //变量节点信息输入 input [WIDTH-1:0] din02_VN_RU, //变量节点信息输入 input [WIDTH-1:0] din03_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 //更新输出 );//输出相对输入延时9个clk reg [WIDTH-1:0] abs01=8'd0,abs01_reg0=8'd0,abs01_reg1=8'd0; reg [WIDTH-1:0] abs02=8'd0,abs02_reg0=8'd0,abs02_reg1=8'd0; reg [WIDTH-1:0] abs03=8'd0,abs03_reg0=8'd0,abs03_reg1=8'd0; 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; end always @ (posedge clk) begin abs01_reg0 <= abs01; abs01_reg1 <= abs01_reg0; abs02_reg0 <= abs02; abs02_reg1 <= abs02_reg0; abs03_reg0 <= abs03; abs03_reg1 <= abs03_reg0; end reg [WIDTH-1:0] min_level_1_01=8'd0,min_level_1_02=8'd0; reg [WIDTH-1:0] min_level_2_01=8'd0,min_level_2_02=8'd0; always @ (posedge clk) begin//第1级分类,两两一组将最小及次小值分开 min_level_1_01 <= (abs01 < abs02) ? abs01:abs02; min_level_1_02 <= (abs01 < abs02) ? abs02:abs01; end always @ (posedge clk) begin min_level_2_01 <= (abs03_reg0