我有8:1序列化器和反序列化器,基于我们的RTL code.As中的数据宽度,我们现在使用作为循环来加载数据路径和从序列化器读取数据路径。我们可以使用流运算符来实现这个功能吗?
对于流媒体运营商来说,我是新手,所以我不知道如何在这种情况下使用它们。
input [8*DATA_WIDTH-1:0] data_from_user; //WRITE DATA
output [8*DATA_WIDTH-1:0] data_to_user; //READ DATA
output [7:0] data_to_phy_serializer [DATA_WIDTH-1:0];
input [7:0] data_from_phy_deserializer [DATA_WIDTH-1:0];
//WRITE DATA PATH FLOW
always@(posedge clk) begin:WRITE_PATH
for(i = 0 ; i < DATA_WIDTH ; i = i+ 1 )
data_to_phy_serializer[i] = '{
data_from_user[DATA_WIDTH*7 + i],
data_from_user[DATA_WIDTH*6 + i],
data_from_user[DATA_WIDTH*5 + i],
data_from_user[DATA_WIDTH*4 + i],
data_from_user[DATA_WIDTH*3 + i],
data_from_user[DATA_WIDTH*2 + i],
data_from_user[DATA_WIDTH*1 + i],
data_from_user[DATA_WIDTH*0 + i]
} ;
end
//READ DATA PATH FLOW
always@(posedge clk) begin:READ_PATH
for(j= 0 ; j < DATA_WIDTH ; j = j + 1)begin
{
data_to_user[j+DATA_WIDTH*7],
data_to_user[j+DATA_WIDTH*6],
data_to_user[j+DATA_WIDTH*5],
data_to_user[j+DATA_WIDTH*4],
data_to_user[j+DATA_WIDTH*3],
data_to_user[j+DATA_WIDTH*2],
data_to_user[j+DATA_WIDTH*1],
data_to_user[j+DATA_WIDTH*0]
} <= #TCQ data_from_phy_deserializer[j] ;
end输入将以8个数据字的形式连在一起,我需要将数据分别发送到每个数据位的PHY,从输入数据中提取相应的元素。
此代码运行良好,但唯一的疑问是,在这种情况下,我是否可以使用流运算符。请不要告诉流媒体运营商的基本知识,比如打包到解压缩转换,反之亦然。我需要为PHY提供数据。如果我能在这种情况下使用流媒体运营商,它将对我有很大帮助。
将4位数据宽度的数据路径写入8:1序列化程序的示例代码
//write data for data width of 4
assign [8*4 -1:0] data = {4'hF,4'hE,4'hD,4'hC,4'hB,4'hA,4'h9,4'h8};
//so now data to each data bit serializer will be
//8:1 data for serializers of
// bit-- 3-- 2-- 1-- 0
// 4'b___1___1___1___1
// 4'b___1___1___1___0
// 4'b___1___1___0___1
// 4'b___1___1___0___0
// 4'b___1___0___1___1
// 4'b___1___0___1___0
// 4'b___1___0___0___1
// 4'b___1___0___0___0
// data for serializer of bit 0 is 8'b10101010
// data for serializer of bit 1 is 8'b11001100
// data for serializer of bit 2 is 8'b11110000
// data for serializer of bit 3 is 8'b11111111
assign [7:0] data_to_phy_serializers [3:0] = '{
8'b11111111,
8'b11110000,
8'b11001100,
8'b10101010
};发布于 2019-04-08 14:04:34
是的,在这两种情况下你都可以使用它。我想这是可行的:
data_to_phy_serializer = {>>{data_from_user}};和
data_to_user <= #TCD {>>{data_from_phy_deserializer}};我这里有一个小的实验例子,你可以玩。
module ab;
logic [3:0][1:0]a;
logic [3:0]b[1:0];
logic [3:0][1:0]c;
initial begin
a = 8'hAB;
b = {>>{a}};
c = {>>{b}};
$displayh(a,b[1],b[0],c);
end
endmodulehttps://stackoverflow.com/questions/55567586
复制相似问题