|
楼主 |
发表于 2011-6-27 16:40:15
|
显示全部楼层
修改后的代码,Test OK
------------------------------------------------
module main_suanfa(
led_A,led_B,led_C,led_D,led_E,
clk_M,
Key_A
);
output led_A,led_B,led_C,led_D,led_E;
input clk_M,Key_A;
reg led_A,led_B,led_C,led_D,led_E;
reg[11:0] memo[4:0];
integer i,j;
reg clk_1khz;
reg [14:0] count_1khz;
task exchange;
inout [11:0] x,y;
reg [11:0] temp;
begin
if(x>y)
begin
temp=x;
x=y;
y=temp;
end
end
endtask
always @(posedge clk_M)
begin
count_1khz<=count_1khz+1;
if (count_1khz==15'b101_1101_1011_1111)
begin
clk_1khz <= ~clk_1khz;
count_1khz <= 0;
end
end
always @(posedge clk_1khz)
begin
if(Key_A==0)
begin
memo[0]<=12'b0100_0000_0000;//1024
memo[1]<=12'b0000_0000_0000;//0
memo[2]<=12'b0110_0011_1111;//1599
memo[3]<=12'b1010_0010_1000;//2600
memo[4]<=12'b0000_0110_0010;//98
if(memo[0]==12'b0100_0000_0000)led_A=1; else led_A=0; //0
if(memo[1]==12'b0000_0000_0000)led_B=1; else led_B=0; //98
if(memo[2]==12'b0110_0011_1111)led_C=1; else led_C=0; //1024
if(memo[3]==12'b1010_0010_1000)led_D=1; else led_D=0; //1599
if(memo[4]==12'b0000_0110_0010)led_E=1; else led_E=0; //2600
//test OK !
//value was readable
end
else
begin
for(i=0;i<4;i=i+1)
begin
for(j=0;j<4-i;j=j+1)
exchange(memo[j+1],memo[j]);
end
if(memo[4]==12'b0000_0000_0000)led_A=1; else led_A=0; //0
if(memo[3]==12'b0000_0110_0010)led_B=1; else led_B=0; //98
if(memo[2]==12'b0100_0000_0000)led_C=1; else led_C=0; //1024
if(memo[1]==12'b0110_0011_1111)led_D=1; else led_D=0; //1599
if(memo[0]==12'b1010_0010_1000)led_E=1; else led_E=0; //2600
end
end
endmodule |
|