-- Infer tri-state buffers for RAM access
AddBus_RAM <= AddBus_ProcA when (EnA1 = '1') else
(others => 'Z');
AddBus_RAM <= AddBus_ProcB when (EnB1 = '1') else
(others => 'Z');
AddBus_RAM <= AddBus_ProcC when (EnC1 = '1') else
(others => 'Z');
DataWriteBus_RAM <= DataWriteBus_ProcA when (EnA2 = '1') else
(others => 'Z');
DataWriteBus_RAM <= DataWriteBus_ProcB when (EnB2 = '1') else
(others => 'Z');
DataWriteBus_RAM <= DataWriteBus_ProcC when (EnC2 = '1') else
(others => 'Z');
R_Wb_RAM <= R_Wb_ProcA when (EnA2 = '1') else 'Z';
R_Wb_RAM <= R_Wb_ProcB when (EnB2 = '1') else 'Z';
R_Wb_RAM <= R_Wb_ProcC when (EnC2 = '1') else 'Z';
VHDL로 설계된 것을 Verilgo로
assign AddBus_RAM = (EnA1 == 1'b1)? AddBus_ProcA : 12'bz;
assign AddBus_RAM = (EnB1 == 1'b1)? AddBus_ProcB : 12'bz;
assign AddBus_RAM = (EnC1 == 1'b1)? AddBus_ProcC : 12'bz;
assign DataWriteBus_RAM = (EnA2 == 1'b1)? DataWriteBus_ProcA : 8'bz;
assign DataWriteBus_RAM = (EnB2 == 1'b1)? DataWriteBus_ProcB : 8'bz;
assign DataWriteBus_RAM = (EnC2 == 1'b1)? DataWriteBus_ProcC : 8'bz;
assign R_Wb_RAM = (EnA2 == 1'b1)? R_Wb_ProcA : 1'bz;
assign R_Wb_RAM = (EnB2 == 1'b1)? R_Wb_ProcB : 1'bz;
assign R_Wb_RAM = (EnC2 == 1'b1)? R_Wb_ProcC : 1'bz;
이렇게 바꾸었는데 이게 맞는건가요?
(others => 'Z')
랑 'Z' 는 차이를 두어야 될꺼같은데 어떻게 해야할지 모르겠네요 ㅠㅠ
도와주세요 ㅠㅠ
첫댓글 위의 식은 동일 신호에 출력을 내보내려는 곳이 3군데라 멀티드라이버 오류를 발생합니다.
참고로 Hi-Z출력은 칩 외부 신호에서 지정가능하고 내부 노드에서는 사용이 곤란한 것으로 압니다.
먹스회로에 의해 선택해주면 아래와 같이 해결될듯
case ({EnA1,EnB1,EnC1})
3'b100: AddBus_RAM = AddBus_ProcA ;
3'b010: AddBus_RAM = AddBus_ProcB ;
3'b001: AddBus_RAM = AddBus_ProcC ;
default : AddBus_RAM = 12'bz;
나머지는 위와 같이 하면 됩니다.
구현하려고 하는게 어떤 기능인지 알 수 없을까요
Arbiter 회로 입니다 ㅎㅎ 정말 많은 도움 주셔서 감사합니다. Arbiter회로는 제가 게시판에 올려놓았어요 ^^