В следващия модул на Verilog бих искал да разбера защо присвояването на блокиране, използващо конкатенация, не дава същия резултат като 2-те коментирани присвоявания на блокиране.
Когато стартирам програмата на FPGA, тя дава очаквания резултат с 2-те задания за блокиране (светодиодите мигат), но не и с заданието за блокиране, използващо конкатенация (светодиодите остават изключени).
Бонус точки за отговори, сочещи към спецификацията на Verilog, обясняваща какво се играе тук!
/* Every second, the set of leds that are lit will change */
module blinky(
input clk,
output [3:0] led
);
reg [3:0] count = 0;
reg [27:0] i = 0;
localparam [27:0] nTicksPerSecond = 100000000;
assign led = {count[3],count[2],count[1],count[0]};
always @ (posedge(clk)) begin
// This works:
//count = i==nTicksPerSecond ? (count + 1) : count;
//i = i==nTicksPerSecond ? 0 : i+1;
// But this doesn't:
{count,i} = i==nTicksPerSecond ?
{count+1, 28'b0 } :
{count , i+1};
end
endmodule
PS: Използвам Vivado 2018.2
i+1
ще бъде широк 32 бита и ще наруши вашия{count , i+1}
битов ред. - person Oldfart   schedule 25.11.2018