gosha 0 14 июня, 2011 Опубликовано 14 июня, 2011 · Жалоба Имеется 5 входных и 5 выходных шин данных; Имеется счетчик (cnt) от 0 до 4 В зависимости от величины счетчика нужно коммутировать входные шины на выходные: cnt1<= ((cnt + 3'h1) < 3'h5) ? (cnt + 3'h1) : (cnt + 3'h1 - 3'h5); cnt2<= ((cnt + 3'h2) < 3'h5) ? (cnt + 3'h2) : (cnt + 3'h2 - 3'h5); cnt3<= ((cnt + 3'h3) < 3'h5) ? (cnt + 3'h3) : (cnt + 3'h3 - 3'h5); cnt4<= ((cnt + 3'h4) < 3'h5) ? (cnt + 3'h4) : (cnt + 3'h4 - 3'h5); out_bus[ cnt][32:0]<= in_bus_0[32:0]; out_bus[cnt1][32:0]<= in_bus_1[32:0]; out_bus[cnt2][32:0]<= in_bus_2[32:0]; out_bus[cnt3][32:0]<= in_bus_3[32:0]; out_bus[cnt4][32:0]<= in_bus_4[32:0]; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iiv 29 14 июня, 2011 Опубликовано 14 июня, 2011 · Жалоба ИМХО, я б написал так case(cnt) 0: {out_bus[0], out_bus[1], out_bus[2], out_bus[3], out_bus[4]} <= {in_bus_0, in_bus_1, in_bus_2, in_bus_3, in_bus_4}; 1: {out_bus[1], out_bus[2], out_bus[3], out_bus[4], out_bus[0]} <= {in_bus_0, in_bus_1, in_bus_2, in_bus_3, in_bus_4}; 2: {out_bus[2], out_bus[3], out_bus[4], out_bus[0], out_bus[1]} <= {in_bus_0, in_bus_1, in_bus_2, in_bus_3, in_bus_4}; 3: {out_bus[3], out_bus[4], out_bus[0], out_bus[1], out_bus[2]} <= {in_bus_0, in_bus_1, in_bus_2, in_bus_3, in_bus_4}; default: {out_bus[4], out_bus[0], out_bus[1], out_bus[2], out_bus[3]} <= {in_bus_0, in_bus_1, in_bus_2, in_bus_3, in_bus_4}; endcase Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 15 июня, 2011 Опубликовано 15 июня, 2011 · Жалоба ИМХО, я б написал так не красиво ИМХО %) wire [0 : 4][31 : 0] bus = {in_bus_0, in_bus_1, in_bus_2, in_bus_3, in_bus_4}; always_comb begin case (cnt) 0 : for (int i = 0; i < 5; i++) out_bus[(i + 0) % 5] = bus[i]; 1 : for (int i = 0; i < 5; i++) out_bus[(i + 1) % 5] = bus[i]; 2 : for (int i = 0; i < 5; i++) out_bus[(i + 2) % 5] = bus[i]; 3 : for (int i = 0; i < 5; i++) out_bus[(i + 3) % 5] = bus[i]; default : for (int i = 0; i < 5; i++) out_bus[(i + 4) % 5] = bus[i]; endcase end если откинуть SV фенечки то integer i; wire [0 : 4*32-1] bus = {in_bus_0, in_bus_1, in_bus_2, in_bus_3, in_bus_4}; always @(*) begin case (cnt) 0 : for (i = 0; i < 5; i=i+1) out_bus[(i + 0) % 5] = bus[i*32 +: 32]; 1 : for (i = 0; i < 5; i=i+1) out_bus[(i + 1) % 5] = bus[i*32 +: 32]; 2 : for (i = 0; i < 5; i=i+1) out_bus[(i + 2) % 5] = bus[i*32 +: 32]; 3 : for (i = 0; i < 5; i=i+1) out_bus[(i + 3) % 5] = bus[i*32 +: 32]; default : for (i = 0; i < 5; i=i+1) out_bus[(i + 4) % 5] = bus[i*32 +: 32]; endcase end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться