Если Вы имеете ввиду в данном вопросе, какие данные передаются непосредственно по JTAG (или другому загрузочному интерфейсу) в ПЛИС, то передается содержимое как раз bin-файла. fs-файл - это по сути просто представление битов bin-файла в текстовом виде (ASCII-символ на бит) с дополнительной информацией в виде комментариев вначале. По интерфейсу ASCII-коды не передаются, поэтому если программа принимает fs-файл на входе, то на каком-то уровне она по идее должна преобразовать его в бинарные данные, соответствующие .bin-файлу. fs-файл позволяет сделать дополнительные проверки на основе комментариев вначале (вроде типа устройства, для которого скомпилирован файл, до записи файла, или узнать USERCODE из файла и проверить после записи и т.п.), но непосредственно для прошивки принципиально содержимого .bin файла достаточно.
OpenFPGALoader не пользовался, не знаю, почему они реализовали прием только fs-файлов (возможно как-то используют дополнительную информацию из начала).
При этом родной Gowin Programmer вполне умеет записывать .bin файлы (хотя явно в документации это действительно не указано). В Gui-версии просто при выборе файла можно сменить фильтр с .fs файла на все файлы и выбрать .bin, а в cli-версии можно в опции --fsFile (несмотря на ее название) указать .bin-файл, и он его запишет. По крайней мере так было в той версии, что я пользовался (тогда была 1.9.8.07/1.9.8.10). В свое время, когда писал свою реализацию прошивки Gowin с контроллера, как раз сравнивал поведение своей программы и Gowin Programmer именно на разных .bin файлах.