fpga中24位的数据怎样通过8位串口传输到上位机,该如何解决

fpga中24位的数据怎样通过8位串口传输到上位机
在接收到上位机指令后,fpga将采集到的24位数据通过8位的串口传输给上位机。由于串口是8位,就得分开传。我想用状态机,case语句来实现,可是在调试的时候只有第一个状态,好像没有进行循环,各位帮忙给看一下。

module TEST_CONTROL (clk,rst,datain,dataout);

parameter DATASIZE = 8;

input clk;
input rst;
input [DATASIZE-1:0]datain; //串口输入端口,接收上位机指令

output [DATASIZE-1:0]dataout;//串口输出端口,传输数据至上位机

reg [DATASIZE-1:0]dataout;

reg [23:0]data_all; //用于测试的数据

integer num = 0;

always @(posedge clk )
 data_all[15:0] <= 16'b0000_0110_0000_0100_0000_0110 ; //测试数据
 if (datain[DATASIZE-1:0] == 8'h0a)
  for (num=0;num<4;num=num+1) //进行循环传输
begin
begin
  num = num + 1;
  case (num)
4'd1: dataout[DATASIZE-1:0] <= data_all[7:0];
4'd2: dataout[DATASIZE-1:0] <= data_all[15:8];
4'd3: dataout[DATASIZE-1:0] <= data_all[23:16];
  endcase
end  

if (num == 4'd4) //置零,当传完后置零
  num = 4'd0;  
end
endmodule



------解决方案--------------------
重新学习下verilog语法吧。不要用for循环,一个always块一个begin-end
------解决方案--------------------
always @(posedge clk )
begin
data_all[15:0] <=。。。。。。。。。。。。。
end

使用for语句比较浪费硬件资源,多看些书就好了,积累!加油!
------解决方案--------------------
module ****_zhenfen__test_control 
#( parameter data_size = 8 )
( input wire clk, 
input wire rst, 
input wire [data_size-1:0] din, 
output wire den,
output reg [data_size-1:0] dout );

/// 3个数据
wire [data_size*3-1:0] data_all = 'b0000_0110_0000_0100_0000_0110 ;

/// din 由非0x0a变为0x0a触发一次测试
reg [data_size-1:0] data_bak;
always @(posedge clk, posedge rst) begin
data_bak <= rst ? 0 : din;
end

wire startup = (!rst) && (din == 'h0a) && (data_bak != 'h0a);

/// 每次测试,输出一轮,自动停止
reg [1:0] num;
always @(posedge clk, posedge rst) begin
if( rst ) begin
num <= 0;
end
else if( startup | num[1] | num[0] ) begin
num <= num + 1;
end
end

assign den = |num;

always @* begin
case( num )
0: dout = 0;
1: dout = data_all[data_size*1-1 -: data_size];
2: dout = data_all[data_size*2-1 -: data_size];
3: dout = data_all[data_size*3-1 -: data_size];
endcase
end

endmodule