Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
always @*. Если вы собираетесь делать именно комбинационное устройство, то все входные сигналы должны быть в списке чувствительности, а все мультиплексоры (операторы if, case, ?:) должны иметь явную ветвь default. always, но если там везде блокирующие присваивания, то придется менять и их. А потом удалось оптимизировать где-то еще, и захотелось вернуться к комбинационной схеме… Вероятность допустить ошибку повышается. PS: в мир FPGA вошел недавно, очень извиняюсь перед более опытными людьми которым мой код выжег глаза. Прошу понять, простить, помочь советом.
1. if( a > b )
2. if (a > b)
module dut
(
input clk,
input [7:0] d,
output logic [7:0] q
);
logic [7:0] r;
always @(posedge clk) // ПЛОХО! Результат симуляции зависит от того, какой блок симулируется раньше в event queue – первый или второй
r = d;
always @(posedge clk)
q = r;
endmodule
module dut
(
input clk,
input [7:0] d,
output logic [7:0] q
);
logic [7:0] r;
always @(posedge clk)
r <= d;
always @(posedge clk)
q <= r;
endmodule
always @ (posedge pixel_clock)
begin
hsync <= (pixel_count < h_sync);
….
always @ (posedge hsync)
…
wire hsync <= (pixel_count < h_sync);
reg prev_hsync;
always @ (posedge clk)
prev_hsync <= hsync;
…
wire pos_hsync = hsync & ~ prev_hsync;
….
always @ (posedge clk)
if(reset)
…
else if (pos_hsync)
if(goal == 0)
begin
HEX_1 = 7'b1000000;
end
if(goal == 1)
begin
HEX_1 = 7'b1111001;
end
if(goal == 2)
begin
HEX_1 = 7'b0100100;
end
case (goal) 0: HEX_1 = 7'b1000000; 1: HEX_1 = 7'b1111001; 2: HEX_1 = 7'b0100100; . . . . default: HEX_1 = 7’b1111111; endcase
#50 PS2_CLK_r = 0; //start
#50 PS2_CLK_r = 0; //0
#50 PS2_CLK_r = 1; //1
#50 PS2_CLK_r = 1; //2
#50 PS2_CLK_r = 0; //3
#50 PS2_CLK_r = 1; //4
#50 PS2_CLK_r = 0; //5
#50 PS2_CLK_r = 1; //6
#50 PS2_CLK_r = 1; //7
#50 PS2_CLK_r = 1; //parity bit
#50 PS2_CLK_r = 0; //stop
#50 PS2_CLK_r = 1; //s
#50 PS2_CLK_r = 1; //s
reg [511:0] test_bits;
integer i;
initial
begin
…
test_bits = 512’b01010111000110010101;
for (i = 0; i < 512; i = i + 1)
#50 PS2_CLK_r = test_bits [i];
рассматривая это как упражнение для Бориса, которого все равно раскритикуют. Когда он собрался публиковать, я ему сказал про проблемы с стилем (см. описание ниже) и предложил либо их исправить, либо опубликовать как есть, с идеей, что на Хабре его все равно раскритикуют.
Создание простой игры на базе FPGA