blinking_led cmdline params
This commit is contained in:
parent
b9d5b59266
commit
8900c55dd1
|
@ -27,19 +27,37 @@
|
|||
int main(int argc, char** argv)
|
||||
{
|
||||
struct fpga_model model;
|
||||
int param_bits;
|
||||
const char *param_clock_pin, *param_led_pin;
|
||||
int iob_clk_y, iob_clk_x, iob_clk_type_idx;
|
||||
int iob_led_y, iob_led_x, iob_led_type_idx;
|
||||
int logic_y, logic_x, logic_type_idx;
|
||||
struct fpgadev_logic logic_cfg;
|
||||
net_idx_t net;
|
||||
|
||||
fpga_build_model(&model, XC6SLX9, TQG144);
|
||||
if (cmdline_help(argc, argv)) {
|
||||
printf( " %*s [-Dbits=14|23]\n"
|
||||
" %*s [-Dclock_pin=P55|...]\n"
|
||||
" %*s [-Dled_pin=P48|...]\n"
|
||||
"\n", (int) strlen(*argv), "",
|
||||
(int) strlen(*argv), "", (int) strlen(*argv), "");
|
||||
return 0;
|
||||
}
|
||||
if (!(param_bits = cmdline_intvar(argc, argv, "bits")))
|
||||
param_bits = 14;
|
||||
if (!(param_clock_pin = cmdline_strvar(argc, argv, "clock_pin")))
|
||||
param_clock_pin = "P55";
|
||||
if (!(param_led_pin = cmdline_strvar(argc, argv, "led_pin")))
|
||||
param_led_pin = "P48";
|
||||
|
||||
fpga_find_iob(&model, "P55", &iob_clk_y, &iob_clk_x, &iob_clk_type_idx);
|
||||
fpga_build_model(&model, cmdline_part(argc, argv),
|
||||
cmdline_package(argc, argv));
|
||||
|
||||
fpga_find_iob(&model, param_clock_pin, &iob_clk_y, &iob_clk_x, &iob_clk_type_idx);
|
||||
fdev_iob_input(&model, iob_clk_y, iob_clk_x, iob_clk_type_idx,
|
||||
IO_LVCMOS33);
|
||||
|
||||
fpga_find_iob(&model, "P48", &iob_led_y, &iob_led_x, &iob_led_type_idx);
|
||||
fpga_find_iob(&model, param_led_pin, &iob_led_y, &iob_led_x, &iob_led_type_idx);
|
||||
fdev_iob_output(&model, iob_led_y, iob_led_x, iob_led_type_idx,
|
||||
IO_LVCMOS25);
|
||||
fdev_iob_slew(&model, iob_led_y, iob_led_x, iob_led_type_idx,
|
||||
|
@ -51,7 +69,7 @@ int main(int argc, char** argv)
|
|||
logic_x = 13;
|
||||
logic_type_idx = DEV_LOG_M_OR_L;
|
||||
|
||||
memset(&logic_cfg, 0, sizeof(logic_cfg));
|
||||
CLEAR(logic_cfg);
|
||||
logic_cfg.a2d[LUT_A].lut6 = "(A6+~A6)*(~A5)";
|
||||
logic_cfg.a2d[LUT_A].lut5 = "1";
|
||||
logic_cfg.a2d[LUT_A].cy0 = CY0_O5;
|
||||
|
@ -100,7 +118,7 @@ int main(int argc, char** argv)
|
|||
logic_cfg.a2d[LUT_C].ff = FF_FF;
|
||||
logic_cfg.a2d[LUT_C].ff_mux = MUX_XOR;
|
||||
logic_cfg.a2d[LUT_C].ff_srinit = FF_SRINIT0;
|
||||
memset(&logic_cfg.a2d[LUT_D], 0, sizeof(logic_cfg.a2d[LUT_D]));
|
||||
CLEAR(logic_cfg.a2d[LUT_D]);
|
||||
fdev_logic_setconf(&model, logic_y, logic_x, logic_type_idx, &logic_cfg);
|
||||
|
||||
// clock to logic devs
|
||||
|
|
|
@ -1092,3 +1092,76 @@ int row_pos_to_y(int num_rows, int row, int pos)
|
|||
y++; // hclk in row
|
||||
return y;
|
||||
}
|
||||
|
||||
int cmdline_help(int argc, char **argv)
|
||||
{
|
||||
int i;
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (!strcmp(argv[i], "--help")) {
|
||||
printf( "\n"
|
||||
"%s floorplan\n"
|
||||
"\n"
|
||||
"Usage: %s [--part=xc6slx9]\n"
|
||||
" %*s [--package=tqg144|ftg256]\n"
|
||||
" %*s [--help]\n",
|
||||
*argv, *argv, (int) strlen(*argv), "",
|
||||
(int) strlen(*argv), "");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cmdline_part(int argc, char **argv)
|
||||
{
|
||||
int i;
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (!strcmp(argv[i], "--part=xc6slx9"))
|
||||
return XC6SLX9;
|
||||
}
|
||||
return XC6SLX9;
|
||||
}
|
||||
|
||||
int cmdline_package(int argc, char **argv)
|
||||
{
|
||||
int i;
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (!strcmp(argv[i], "--package=tqg144"))
|
||||
return TQG144;
|
||||
if (!strcmp(argv[i], "--package=ftg256"))
|
||||
return FTG256;
|
||||
}
|
||||
return TQG144;
|
||||
}
|
||||
|
||||
const char *cmdline_strvar(int argc, char **argv, const char *var)
|
||||
{
|
||||
enum { NUM_BUFS = 32, BUF_SIZE = 256 };
|
||||
static char buf[NUM_BUFS][BUF_SIZE];
|
||||
static int last_buf = 0;
|
||||
char scan_str[128];
|
||||
int i, next_buf;
|
||||
|
||||
next_buf = (last_buf+1)%NUM_BUFS;
|
||||
snprintf(scan_str, sizeof(scan_str), "-D%s=%%s", var);
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (sscanf(argv[i], scan_str, buf[next_buf]) == 1) {
|
||||
last_buf = next_buf;
|
||||
return buf[last_buf];
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cmdline_intvar(int argc, char **argv, const char *var)
|
||||
{
|
||||
char buf[128];
|
||||
int i, out_int;
|
||||
|
||||
snprintf(buf, sizeof(buf), "-D%s=%%i", var);
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (sscanf(argv[i], buf, &out_int) == 1)
|
||||
return out_int;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#define FAIL(code) do { HERE(); rc = (code); goto fail; } while (0)
|
||||
#define XOUT() do { HERE(); goto xout; } while (0)
|
||||
#define ASSERT(what) do { if (!(what)) FAIL(EINVAL); } while (0)
|
||||
#define CLEAR(x) memset(&(x), 0, sizeof(x))
|
||||
|
||||
#define RC_CHECK(model) do { if ((model)->rc) RC_RETURN(model); } while (0)
|
||||
#define RC_ASSERT(model, what) do { RC_CHECK(model); if (!(what)) RC_FAIL(model, EINVAL); } while (0)
|
||||
|
@ -159,3 +160,9 @@ int strarray_stash(struct hashed_strarray* array, const char* str, int idx);
|
|||
int strarray_used_slots(struct hashed_strarray* array);
|
||||
|
||||
int row_pos_to_y(int num_rows, int row, int pos);
|
||||
|
||||
int cmdline_help(int argc, char **argv);
|
||||
int cmdline_part(int argc, char **argv);
|
||||
int cmdline_package(int argc, char **argv);
|
||||
const char *cmdline_strvar(int argc, char **argv, const char *var);
|
||||
int cmdline_intvar(int argc, char **argv, const char *var);
|
||||
|
|
Loading…
Reference in New Issue
Block a user