Смотря какие тайминги, и смотря как скорость ПЛИС. Для высоких скоростей работы я бы посоветовал делать полностью синхронный дизайн: работать по CKOUT, на все сигналы двойную синхронизацию, а только потом уже защелки.
Код
module simple_reg (CKOUT, d, nce, noe, nwe);
inout [7:0] d;
input nce, nwe, noe,CKOUT;
reg [7:0] din_1d,din_2d, din, dout;
reg nce_1d, nwe_1d, noe_1d, nce_2d, nwe_2d, noe_2d;
// sync
always @(posedge CLKOUT)
begin
nce_1d <= nce;
nce_2d <= nce_1d;
nwe_1d <= nwe;
nwe_2d <= nwe_1d;
noe_1d <= noe;
noe_2d <= noe_1d;
din_1d[7:0] <= d[7:0];
din_2d[7:0] <= din_1d[7:0];
end
//latches
always @(posedge CLKOUT)
begin
if(nwe_2d & ~nwe_1d) din[7:0] <= din_2d[7:0];
if(.....) dout[7:0] <= ...
end
assign d = (nce | noe) ? 8'hzz : dout;
endmodule
Так получатся наилучшие сетапы, холды и общая fmax. Но будет больше потреблять, займет больше места внутри плис и т.д. В общем, свои + и -