Académique Documents
Professionnel Documents
Culture Documents
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
redE,
amberE,
greenE,
redW,
amberW,
greenW,
greenP,
amberP,
redP
Method: cDW
Conflict-free: p_button, cDN, cDS, cDE
Sequenced before (restricted): cDW
Sequenced after (restricted): redNS,
amberNS,
greenNS,
redE,
amberE,
greenE,
redW,
amberW,
greenW,
greenP,
amberP,
redP
Method: redNS
Conflict-free: redNS,
amberNS,
greenNS,
redE,
amberE,
greenE,
redW,
amberW,
greenW,
greenP,
amberP,
redP
Sequenced before (restricted): p_button, cDN, cDS, cDE, cDW
Method: amberNS
Conflict-free: redNS,
amberNS,
greenNS,
redE,
amberE,
greenE,
redW,
amberW,
greenW,
greenP,
amberP,
redP
Sequenced before (restricted): p_button, cDN, cDS, cDE, cDW
Method: greenNS
Conflict-free: redNS,
amberNS,
greenNS,
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
redE,
amberE,
greenE,
redW,
amberW,
greenW,
greenP,
amberP,
redP
Sequenced before (restricted): p_button, cDN, cDS, cDE, cDW
Method: redE
Conflict-free: redNS,
amberNS,
greenNS,
redE,
amberE,
greenE,
redW,
amberW,
greenW,
greenP,
amberP,
redP
Sequenced before (restricted): p_button, cDN, cDS, cDE, cDW
Method: amberE
Conflict-free: redNS,
amberNS,
greenNS,
redE,
amberE,
greenE,
redW,
amberW,
greenW,
greenP,
amberP,
redP
Sequenced before (restricted): p_button, cDN, cDS, cDE, cDW
Method: greenE
Conflict-free: redNS,
amberNS,
greenNS,
redE,
amberE,
greenE,
redW,
amberW,
greenW,
greenP,
amberP,
redP
Sequenced before (restricted): p_button, cDN, cDS, cDE, cDW
Method: redW
Conflict-free: redNS,
amberNS,
greenNS,
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
redE,
amberE,
greenE,
redW,
amberW,
greenW,
greenP,
amberP,
redP
Sequenced before (restricted): p_button, cDN, cDS, cDE, cDW
Method: amberW
Conflict-free: redNS,
amberNS,
greenNS,
redE,
amberE,
greenE,
redW,
amberW,
greenW,
greenP,
amberP,
redP
Sequenced before (restricted): p_button, cDN, cDS, cDE, cDW
Method: greenW
Conflict-free: redNS,
amberNS,
greenNS,
redE,
amberE,
greenE,
redW,
amberW,
greenW,
greenP,
amberP,
redP
Sequenced before (restricted): p_button, cDN, cDS, cDE, cDW
Method: greenP
Conflict-free: redNS,
amberNS,
greenNS,
redE,
amberE,
greenE,
redW,
amberW,
greenW,
greenP,
amberP,
redP
Sequenced before (restricted): p_button, cDN, cDS, cDE, cDW
Method: amberP
Conflict-free: redNS,
amberNS,
greenNS,
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
redE,
amberE,
greenE,
redW,
amberW,
greenW,
greenP,
amberP,
redP
Sequenced before (restricted): p_button, cDN, cDS, cDE, cDW
Method: redP
Conflict-free: redNS,
amberNS,
greenNS,
redE,
amberE,
greenE,
redW,
amberW,
greenW,
greenP,
amberP,
redP
Sequenced before (restricted): p_button, cDN, cDS, cDE, cDW
Ports:
Name
redNS
amberNS
greenNS
redE
amberE
greenE
redW
amberW
greenW
greenP
amberP
redP
CLK
RST_N
cDN_b
cDS_b
cDE_b
cDW_b
EN_p_button
`ifdef BSV_ASSIGNMENT_DELAY
`else
`define BSV_ASSIGNMENT_DELAY
`endif
module mktraffic(CLK,
RST_N,
EN_p_button,
cDN_b,
cDS_b,
cDE_b,
cDW_b,
redNS,
amberNS,
greenNS,
redE,
amberE,
greenE,
redW,
amberW,
greenW,
greenP,
amberP,
redP);
input CLK;
input RST_N;
// action method p_button
input EN_p_button;
// action method cDN
input cDN_b;
// action method cDS
input cDS_b;
// action method cDE
input cDE_b;
// action method cDW
input cDW_b;
// value method redNS
output redNS;
// value method amberNS
output amberNS;
// value method greenNS
output greenNS;
reg [3 : 0] next_green$D_IN;
wire next_green$EN;
// register ped_button
reg ped_button;
wire ped_button$D_IN, ped_button$EN;
// register secs
reg [31 : 0] secs;
wire [31 : 0] secs$D_IN;
wire secs$EN;
// register state
reg [3 : 0] state;
reg [3 : 0] state$D_IN;
wire state$EN;
// rule scheduling signals
wire CAN_FIRE_RL_inc,
CAN_FIRE_RL_rAllRed,
CAN_FIRE_RL_rAmberE,
CAN_FIRE_RL_rAmberNS,
CAN_FIRE_RL_rAmberP,
CAN_FIRE_RL_rAmberW,
CAN_FIRE_RL_rGreenE,
CAN_FIRE_RL_rGreenNS,
CAN_FIRE_RL_rGreenP,
CAN_FIRE_RL_rGreenW,
CAN_FIRE_cDE,
CAN_FIRE_cDN,
CAN_FIRE_cDS,
CAN_FIRE_cDW,
CAN_FIRE_p_button,
WILL_FIRE_RL_inc,
WILL_FIRE_RL_rAllRed,
WILL_FIRE_RL_rAmberE,
WILL_FIRE_RL_rAmberNS,
WILL_FIRE_RL_rAmberP,
WILL_FIRE_RL_rAmberW,
WILL_FIRE_RL_rGreenE,
WILL_FIRE_RL_rGreenNS,
WILL_FIRE_RL_rGreenP,
WILL_FIRE_RL_rGreenW,
WILL_FIRE_cDE,
WILL_FIRE_cDN,
WILL_FIRE_cDS,
WILL_FIRE_cDW,
WILL_FIRE_p_button;
// inputs to muxes for submodule ports
reg [3 : 0] MUX_next_green$write_1__VAL_1;
wire [31 : 0] MUX_secs$write_1__VAL_1;
wire [3 : 0] MUX_state$write_1__VAL_1;
wire MUX_next_green$write_1__SEL_1,
MUX_next_green$write_1__SEL_2,
MUX_secs$write_1__SEL_1,
MUX_secs$write_1__SEL_2,
MUX_state$write_1__SEL_3;
// remaining internal signals
reg IF_next_green_EQ_1_THEN_NOT_car_north_1_AND_NO_ETC___d70,
IF_next_green_EQ_1_THEN_car_north_OR_car_south_ETC___d74;
wire [31 : 0] secs_9_PLUS_1___d61;
wire NOT_secs_9_PLUS_1_0_SLT_1_6___d27, NOT_secs_9_SLT_1_6___d37;
// action method p_button
assign CAN_FIRE_p_button = 1'd1 ;
assign WILL_FIRE_p_button = EN_p_button ;
// action method cDN
assign CAN_FIRE_cDN = 1'd1 ;
assign WILL_FIRE_cDN = 1'd1 ;
// action method cDS
assign CAN_FIRE_cDS = 1'd1 ;
assign WILL_FIRE_cDS = 1'd1 ;
// action method cDE
assign CAN_FIRE_cDE = 1'd1 ;
assign WILL_FIRE_cDE = 1'd1 ;
// action method cDW
assign CAN_FIRE_cDW = 1'd1 ;
assign WILL_FIRE_cDW = 1'd1 ;
// value method redNS
assign redNS = state != 4'd1 && state != 4'd2 ;
// value method amberNS
assign amberNS = state == 4'd2 ;
// value method greenNS
assign greenNS = state == 4'd1 ;
// value method redE
assign redE = state != 4'd3 && state != 4'd4 ;
// value method amberE
assign amberE = state == 4'd4 ;
// value method greenE
assign greenE = state == 4'd3 ;
// value method redW
assign redW = state != 4'd5 && state != 4'd6 ;
// value method amberW
assign amberW = state == 4'd6 ;
// value method greenW
assign greenW = state == 4'd5 ;
// value method greenP
assign greenP = state == 4'd7 ;
// value method amberP
assign amberP = state == 4'd8 ;
// value method redP
assign redP = state != 4'd7 && state != 4'd8 ;
// rule RL_rAllRed
assign CAN_FIRE_RL_rAllRed =
state == 4'd0 && NOT_secs_9_PLUS_1_0_SLT_1_6___d27 ;
assign WILL_FIRE_RL_rAllRed = CAN_FIRE_RL_rAllRed ;
// rule RL_inc
assign CAN_FIRE_RL_inc = 1'd1 ;
assign WILL_FIRE_RL_inc =
!WILL_FIRE_RL_rAmberW && !WILL_FIRE_RL_rGreenW &&
!WILL_FIRE_RL_rAmberE &&
!WILL_FIRE_RL_rGreenE &&
!WILL_FIRE_RL_rAmberNS &&
!WILL_FIRE_RL_rGreenNS &&
!WILL_FIRE_RL_rAmberP &&
!WILL_FIRE_RL_rGreenP &&
!WILL_FIRE_RL_rAllRed ;
// rule RL_rGreenP
assign CAN_FIRE_RL_rGreenP = state == 4'd7 && NOT_secs_9_SLT_1_6___d37 ;
assign WILL_FIRE_RL_rGreenP = CAN_FIRE_RL_rGreenP ;
// rule RL_rAmberP
assign CAN_FIRE_RL_rAmberP = state == 4'd8 && NOT_secs_9_SLT_1_6___d37 ;
assign WILL_FIRE_RL_rAmberP = CAN_FIRE_RL_rAmberP ;
// rule RL_rGreenNS
assign CAN_FIRE_RL_rGreenNS =
state == 4'd1 && NOT_secs_9_PLUS_1_0_SLT_1_6___d27 ;
assign WILL_FIRE_RL_rGreenNS = CAN_FIRE_RL_rGreenNS ;
// rule RL_rAmberNS
assign CAN_FIRE_RL_rAmberNS =
state == 4'd2 && NOT_secs_9_PLUS_1_0_SLT_1_6___d27 ;
assign WILL_FIRE_RL_rAmberNS = CAN_FIRE_RL_rAmberNS ;
// rule RL_rGreenE
assign CAN_FIRE_RL_rGreenE =
state == 4'd3 && NOT_secs_9_PLUS_1_0_SLT_1_6___d27 ;
assign WILL_FIRE_RL_rGreenE = CAN_FIRE_RL_rGreenE ;
// rule RL_rAmberE
assign CAN_FIRE_RL_rAmberE =
state == 4'd4 && NOT_secs_9_PLUS_1_0_SLT_1_6___d27 ;
assign WILL_FIRE_RL_rAmberE = CAN_FIRE_RL_rAmberE ;
// rule RL_rAmberW
assign CAN_FIRE_RL_rAmberW =
state == 4'd6 && NOT_secs_9_PLUS_1_0_SLT_1_6___d27 ;
assign WILL_FIRE_RL_rAmberW = CAN_FIRE_RL_rAmberW ;
// rule RL_rGreenW
assign CAN_FIRE_RL_rGreenW =
state == 4'd5 && NOT_secs_9_PLUS_1_0_SLT_1_6___d27 ;
assign WILL_FIRE_RL_rGreenW = CAN_FIRE_RL_rGreenW ;
// inputs to muxes for submodule ports
assign MUX_next_green$write_1__SEL_1 =
WILL_FIRE_RL_rAllRed && !ped_button &&
IF_next_green_EQ_1_THEN_NOT_car_north_1_AND_NO_ETC___d70 ;
assign MUX_next_green$write_1__SEL_2 =
WILL_FIRE_RL_inc &&
IF_next_green_EQ_1_THEN_NOT_car_north_1_AND_NO_ETC___d70 ;
assign MUX_secs$write_1__SEL_1 =
WILL_FIRE_RL_inc &&
(IF_next_green_EQ_1_THEN_car_north_OR_car_south_ETC___d74 ||
IF_next_green_EQ_1_THEN_NOT_car_north_1_AND_NO_ETC___d70) ;
assign MUX_secs$write_1__SEL_2 =
WILL_FIRE_RL_rAllRed &&
(ped_button ||
IF_next_green_EQ_1_THEN_car_north_OR_car_south_ETC___d74 ||
IF_next_green_EQ_1_THEN_NOT_car_north_1_AND_NO_ETC___d70) ;
assign MUX_state$write_1__SEL_3 =
WILL_FIRE_RL_rAmberW || WILL_FIRE_RL_rAmberE ||
WILL_FIRE_RL_rAmberNS ||
WILL_FIRE_RL_rAmberP ;
always@(next_green)
begin
case (next_green)
4'd1: MUX_next_green$write_1__VAL_1 = 4'd3;
4'd3: MUX_next_green$write_1__VAL_1 = 4'd5;
default: MUX_next_green$write_1__VAL_1 = 4'd1;
endcase
end
assign MUX_secs$write_1__VAL_1 =
IF_next_green_EQ_1_THEN_car_north_OR_car_south_ETC___d74 ?
secs_9_PLUS_1___d61 :
32'd0 ;
assign MUX_state$write_1__VAL_1 =
ped_button ?
4'd7 :
(IF_next_green_EQ_1_THEN_car_north_OR_car_south_ETC___d74 ?
next_green :
4'd0) ;
// register car_east
assign car_east$D_IN = cDE_b ;
assign car_east$EN = 1'd1 ;
// register car_north
assign car_north$D_IN = cDN_b ;
assign car_north$EN = 1'd1 ;
// register car_south
assign car_south$D_IN = cDS_b ;
assign car_south$EN = 1'd1 ;
// register car_west
assign car_west$D_IN = cDW_b ;
assign car_west$EN = 1'd1 ;
// register next_green
always@(MUX_next_green$write_1__SEL_1 or
MUX_next_green$write_1__VAL_1 or
MUX_next_green$write_1__SEL_2 or
WILL_FIRE_RL_rAmberW or
WILL_FIRE_RL_rAmberNS or WILL_FIRE_RL_rAmberE)
begin
case (1'b1) // synopsys parallel_case
MUX_next_green$write_1__SEL_1:
next_green$D_IN = MUX_next_green$write_1__VAL_1;
MUX_next_green$write_1__SEL_2:
next_green$D_IN = MUX_next_green$write_1__VAL_1;
WILL_FIRE_RL_rAmberW: next_green$D_IN = 4'd1;
WILL_FIRE_RL_rAmberNS: next_green$D_IN = 4'd3;
WILL_FIRE_RL_rAmberE: next_green$D_IN = 4'd5;
default: next_green$D_IN = 4'b1010 /* unspecified value */ ;
endcase
end
assign next_green$EN =
WILL_FIRE_RL_rAllRed && !ped_button &&
IF_next_green_EQ_1_THEN_NOT_car_north_1_AND_NO_ETC___d70 ||
WILL_FIRE_RL_inc &&
IF_next_green_EQ_1_THEN_NOT_car_north_1_AND_NO_ETC___d70 ||
WILL_FIRE_RL_rAmberW ||
WILL_FIRE_RL_rAmberNS ||
WILL_FIRE_RL_rAmberE ;
// register ped_button
assign ped_button$D_IN = EN_p_button ;
assign ped_button$EN = WILL_FIRE_RL_rAllRed && ped_button || EN_p_button ;
// register secs
assign secs$D_IN =
MUX_secs$write_1__SEL_1 ? MUX_secs$write_1__VAL_1 : 32'd0 ;
assign secs$EN =
WILL_FIRE_RL_inc &&
(IF_next_green_EQ_1_THEN_car_north_OR_car_south_ETC___d74 ||
IF_next_green_EQ_1_THEN_NOT_car_north_1_AND_NO_ETC___d70) ||
WILL_FIRE_RL_rAllRed &&
(ped_button ||
IF_next_green_EQ_1_THEN_car_north_OR_car_south_ETC___d74 ||
IF_next_green_EQ_1_THEN_NOT_car_north_1_AND_NO_ETC___d70) ||
WILL_FIRE_RL_rAmberW ||
WILL_FIRE_RL_rGreenW ||
WILL_FIRE_RL_rAmberE ||
WILL_FIRE_RL_rGreenE ||
WILL_FIRE_RL_rAmberNS ||
WILL_FIRE_RL_rGreenNS ||
WILL_FIRE_RL_rAmberP ||
WILL_FIRE_RL_rGreenP ;
// register state
always@(MUX_secs$write_1__SEL_2 or
MUX_state$write_1__VAL_1 or
MUX_next_green$write_1__SEL_2 or
MUX_next_green$write_1__VAL_1 or
MUX_state$write_1__SEL_3 or
WILL_FIRE_RL_rGreenNS or
WILL_FIRE_RL_rGreenE or
WILL_FIRE_RL_rGreenW or WILL_FIRE_RL_rGreenP)
begin
case (1'b1) // synopsys parallel_case
MUX_secs$write_1__SEL_2: state$D_IN = MUX_state$write_1__VAL_1;
MUX_next_green$write_1__SEL_2:
state$D_IN = MUX_next_green$write_1__VAL_1;
MUX_state$write_1__SEL_3: state$D_IN = 4'd0;
WILL_FIRE_RL_rGreenNS: state$D_IN = 4'd2;
WILL_FIRE_RL_rGreenE: state$D_IN = 4'd4;
WILL_FIRE_RL_rGreenW: state$D_IN = 4'd6;