Now we can also auto-generate the Verilog for a mux2 std cell
This commit is contained in:
parent
55bfaf271d
commit
f57495feba
|
@ -547,7 +547,49 @@ void dump_verilog_gate_module(FILE* fp,
|
|||
fprintf(fp, ";\n");
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case SPICE_MODEL_GATE_MUX2:
|
||||
/* Check on the port sequence and map */
|
||||
/* MUX2 should only have 1 output port with size 1 */
|
||||
if (1 != num_output_port) {
|
||||
vpr_printf(TIO_MESSAGE_ERROR,
|
||||
"(File:%s, [LINE%d]) MUX2 circuit model must have only 1 output!\n",
|
||||
__FILE__, __LINE__);
|
||||
exit(1);
|
||||
} else if (1 != output_port[0]->size) {
|
||||
vpr_printf(TIO_MESSAGE_ERROR,
|
||||
"(File:%s, [LINE%d]) Output size of a MUX2 circuit model must be 1!\n",
|
||||
__FILE__, __LINE__);
|
||||
exit(1);
|
||||
}
|
||||
/* MUX2 should only have 3 output port, each of which has a port size of 1 */
|
||||
if (3 != num_input_port) {
|
||||
vpr_printf(TIO_MESSAGE_ERROR,
|
||||
"(File:%s, [LINE%d]) MUX2 circuit model must have only 3 input!\n",
|
||||
__FILE__, __LINE__);
|
||||
exit(1);
|
||||
} else {
|
||||
for (iport = 0; iport < num_input_port; iport++) {
|
||||
/* Bypass port size of 1 */
|
||||
if (1 == input_port[iport]->size) {
|
||||
continue;
|
||||
}
|
||||
vpr_printf(TIO_MESSAGE_ERROR,
|
||||
"(File:%s, [LINE%d]) Input size MUX2 circuit model must be 1!\n",
|
||||
__FILE__, __LINE__);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
/* Now, we output the logic of MUX2
|
||||
* IMPORTANT Restriction:
|
||||
* We always assum the first two inputs are data inputs
|
||||
* the third input is the select port
|
||||
*/
|
||||
fprintf(fp, "assign %s[%d] = %s[%d] ? %s[%d] : %s[%d];\n",
|
||||
output_port[0]->lib_name, 0,
|
||||
input_port[2]->lib_name, 0,
|
||||
input_port[0]->lib_name, 0,
|
||||
input_port[1]->lib_name, 0);
|
||||
break;
|
||||
default:
|
||||
vpr_printf(TIO_MESSAGE_ERROR,"(File:%s,[LINE%d])Invalid topology for spice model (%s)!\n",
|
||||
|
|
Loading…
Reference in New Issue