И было это 35 лет назад...
Но вот отличать серьезное высказывание от сарказма или юмора - это , увы , не лечится, бедный совсем КуКу...
Код: Выделить всё
module translate16to10 ( vol, sign_3, sign_2, sign_1, sign_0 );
input wire [23:0]vol;
output reg [3:0]sign_0;
output reg [3:0]sign_1;
output reg [3:0]sign_2;
output reg [3:0]sign_3;
reg [3:0] mod1;
reg [6:0] mod10;
reg [9:0] mod100;
reg [12:0] mod1000;
always@(*)
begin
if( vol < 4'd10 )
begin
sign_0 = vol[3:0];
sign_1 = 4'b0000;
sign_2 = 4'b0000;
sign_3 = 4'b0000;
end
else
begin
if( vol < 7'd100 )
begin
mod10 = vol / 5'd10;
mod1 = vol - ( mod10 * 5'd10 );
sign_0 = mod1;
sign_1 = mod10;
sign_2 = 4'b0000;
sign_3 = 4'b0000;
end
else
if( vol < 10'd1000 )
begin
mod100 = vol / 7'd100;
mod10 = ( vol - ( mod100 * 7'd100 ) ) / 4'd10;
mod1 = vol - ( mod100 * 7'd100 ) - ( mod10 * 4'd10 );
sign_0 = mod1;
sign_1 = mod10;
sign_2 = mod100;
sign_3 = 4'b0000;
end
else
if( vol < 14'd10000 )
begin
mod1000 = vol / 10'd1000;
mod100 = ( vol - ( mod1000 * 10'd1000 ) ) / 7'd100;
mod10 = ( vol - (( mod1000 * 10'd1000 ) ) - ( mod100 * 7'd100 ) ) / 4'd10;
mod1 = vol - (mod1000 * 10'd1000 ) - ( mod100 * 7'd100 ) - ( mod10 * 4'd10 );
sign_0 = mod1;
sign_1 = mod10;
sign_2 = mod100;
sign_3 = mod1000;
end
else
begin
sign_0 = 4'b0000;
sign_1 = 4'b0000;
sign_2 = 4'b0000;
sign_3 = 4'b0000;
end
end
end
endmodule

Код: Выделить всё
module translate16to10 ( vol, sign_3, sign_2, sign_1, sign_0 );
input wire [23:0]vol;
output reg [3:0]sign_0;
output reg [3:0]sign_1;
output reg [3:0]sign_2;
output reg [3:0]sign_3;
reg [13:0] mult1; // max 9000
reg [9:0] mult2; // max 900
always@(vol)
begin
if( vol < 4'd10 )
begin
sign_0 = vol[3:0];
sign_1 = 4'b0000;
sign_2 = 4'b0000;
sign_3 = 4'b0000;
end
else
begin
if( vol < 7'd100 )
begin
sign_1 = vol / 5'd10;
sign_0 = vol - ( sign_1 * 5'd10 );
sign_2 = 4'b0000;
sign_3 = 4'b0000;
end
else
if( vol < 10'd1000 )
begin
sign_2 = vol / 7'd100;
mult2 = sign_2 * 7'd100;
sign_1 = ( vol - mult2 ) / 4'd10;
sign_0 = vol - mult2 - ( sign_1 * 4'd10 );
sign_3 = 4'b0000;
end
else
if( vol < 14'd10000 )
begin
sign_3 = vol / 10'd1000;
mult1 = sign_3 * 10'd1000;
sign_2 = ( vol - mult1 ) / 7'd100;
mult2 = sign_2 * 7'd100;
sign_1 = ( vol - mult1 - mult2 ) / 4'd10;
sign_0 = vol - mult1 - mult2 - ( sign_1 * 4'd10 );
end
else
begin
sign_0 = 4'b0000;
sign_1 = 4'b0000;
sign_2 = 4'b0000;
sign_3 = 4'b0000;
end
end
end
endmodule
Код: Выделить всё
module translate16to10 ( vol, sign_3, sign_2, sign_1, sign_0 );
input wire [23:0]vol;
output reg [3:0]sign_0;
output reg [3:0]sign_1;
output reg [3:0]sign_2;
output reg [3:0]sign_3;
reg [13:0] mult1; // max 9000
reg [9:0] mult2; // max 900
always@(vol)
begin
if( vol < 14'd10000 )
begin
sign_3 = vol / 10'd1000;
mult1 = sign_3 * 10'd1000;
sign_2 = ( vol - mult1 ) / 7'd100;
mult2 = sign_2 * 7'd100;
sign_1 = ( vol - mult1 - mult2 ) / 4'd10;
sign_0 = vol - mult1 - mult2 - ( sign_1 * 4'd10 );
end
else
begin
sign_0 = 4'b0000;
sign_1 = 4'b0000;
sign_2 = 4'b0000;
sign_3 = 4'b0000;
end
end
endmodule