update shop data

pull/49/head
Sebastien Bourdeauducq 2019-11-06 14:48:26 +08:00
parent cf26888ea1
commit ede2829c92
6 changed files with 111 additions and 201 deletions

View File

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -1663,9 +1663,7 @@ class Shop extends React.PureComponent {
<OrderPanel <OrderPanel
title="Order hardware" title="Order hardware"
description=" description="
Choose your crate and drag/add the cards you want Drag and drop the cards you want into the crate below to see how the combination would look like. If you have any issues with this ordering system, or if you need other configurations, email us directly anytime at sales@m-****.hk. The price is estimated and must be confirmed by a quote."
to the crate below to see
how the combination would look like."
crateMode={ crateMode={
<CrateMode <CrateMode
items={crateModeItems} items={crateModeItems}

View File

@ -5,4 +5,4 @@ for(var u=h.reduce(function(a,b,c){return("kasli"===b.type||"kasli-backplane"===
["novo","urukul","koster"].map(function(a){return h.find(function(b){return b.type===a})&&(k[c.state.items[a].rules.connectors.type]=_objectSpread({},c.state.items[a].rules.connectors)),a});for(var z=h.reduce(function(a,b,c){return"idc-bnc"===b.type&&a.push(c),a},[]),A=z.length-1;0<=A;A--){var B=z[A],C=!1;if(0==B)C=!0;else if(1<=B){var H=z[A]-1;"zotino"!==h[H].type&&"hd68"!==h[H].type&&"idc-bnc"!==h[H].type&&(C=!0)}C&&(j[B]=_objectSpread({},h[B]),j[B].warnings={},j[B].warnings.wrong=_objectSpread({},h[B].rules.wrong))}// check number of IDC-BNC adapters for a Zotino and HD68-IDC ["novo","urukul","koster"].map(function(a){return h.find(function(b){return b.type===a})&&(k[c.state.items[a].rules.connectors.type]=_objectSpread({},c.state.items[a].rules.connectors)),a});for(var z=h.reduce(function(a,b,c){return"idc-bnc"===b.type&&a.push(c),a},[]),A=z.length-1;0<=A;A--){var B=z[A],C=!1;if(0==B)C=!0;else if(1<=B){var H=z[A]-1;"zotino"!==h[H].type&&"hd68"!==h[H].type&&"idc-bnc"!==h[H].type&&(C=!0)}C&&(j[B]=_objectSpread({},h[B]),j[B].warnings={},j[B].warnings.wrong=_objectSpread({},h[B].rules.wrong))}// check number of IDC-BNC adapters for a Zotino and HD68-IDC
for(var D=h.reduce(function(a,b,c){return("zotino"===b.type||"hd68"===b.type)&&a.push(c),a},[]),E=function(a){var b=void 0,c=0,d=D[a];b=a===D.length-1?h.slice(d+1):h.slice(d+1,D[a+1]);var e=!1;// check if HD68-IDC has at least 1 IDC-BNC adapter for(var D=h.reduce(function(a,b,c){return("zotino"===b.type||"hd68"===b.type)&&a.push(c),a},[]),E=function(a){var b=void 0,c=0,d=D[a];b=a===D.length-1?h.slice(d+1):h.slice(d+1,D[a+1]);var e=!1;// check if HD68-IDC has at least 1 IDC-BNC adapter
if(c=b.reduce(function(a,b,c,d){return 0===c&&"idc-bnc"===b.type?a+1:"idc-bnc"===d[0].type&&0<c&&"idc-bnc"===d[c-1].type?("idc-bnc"!==b.type&&(e=!0),a+("idc-bnc"!==b.type||e?0:1)):a},0),(d in j)?(j[d].nbrCurrentSlot=c,!("warnings"in j[d])&&(j[d].warnings={})):(j[d]=_objectSpread({},h[d]),j[d].nbrCurrentSlot=c,j[d].warnings={}),0<c&&(k[h[d].rules.maxSlot.type]=_objectSpread({},h[d].rules.maxSlot)),c>h[d].nbrSlotMax&&(j[d].warnings.maxSlotWarning=_objectSpread({},h[d].rules.maxSlotWarning)),"hd68"===h[d].type){var f=!1;d<h.length-1?"idc-bnc"!==h[d+1].type&&(f=!0):d===h.length-1&&(f=!0),f&&((d in j)?j[d].warnings.minAdapter=_objectSpread({},h[d].rules.minAdapter):(j[d]=_objectSpread({},h[d]),j[d].warnings={},j[d].warnings.minAdapter=_objectSpread({},h[d].rules.minAdapter)))}},F=0;F<=D.length-1;F++)E(F);// update state with rules if(c=b.reduce(function(a,b,c,d){return 0===c&&"idc-bnc"===b.type?a+1:"idc-bnc"===d[0].type&&0<c&&"idc-bnc"===d[c-1].type?("idc-bnc"!==b.type&&(e=!0),a+("idc-bnc"!==b.type||e?0:1)):a},0),(d in j)?(j[d].nbrCurrentSlot=c,!("warnings"in j[d])&&(j[d].warnings={})):(j[d]=_objectSpread({},h[d]),j[d].nbrCurrentSlot=c,j[d].warnings={}),0<c&&(k[h[d].rules.maxSlot.type]=_objectSpread({},h[d].rules.maxSlot)),c>h[d].nbrSlotMax&&(j[d].warnings.maxSlotWarning=_objectSpread({},h[d].rules.maxSlotWarning)),"hd68"===h[d].type){var f=!1;d<h.length-1?"idc-bnc"!==h[d+1].type&&(f=!0):d===h.length-1&&(f=!0),f&&((d in j)?j[d].warnings.minAdapter=_objectSpread({},h[d].rules.minAdapter):(j[d]=_objectSpread({},h[d]),j[d].warnings={},j[d].warnings.minAdapter=_objectSpread({},h[d].rules.minAdapter)))}},F=0;F<=D.length-1;F++)E(F);// update state with rules
this.setState(_objectSpread({},this.state,{columns:_objectSpread({},this.state.columns,{cart:_objectSpread({},this.state.columns.cart,{itemsData:_objectSpread({},j)})}),rules:_objectSpread({},k)}))}},{key:"render",value:function render(){var a=this.state,b=a.currency,c=a.currentItemHovered,d=a.currentMode,e=a.crateModeSlots,f=a.crateModeItems,g=a.items,h=a.columns,i=a.rules;return React.createElement(DragDropContext,{onDragEnd:this.handleOnDragEnd},React.createElement(Layout,{className:"shop",aside:React.createElement(Backlog,{currency:b,items:g,data:h.backlog,onClickAddItem:this.handleClickAddItem}),main:React.createElement(OrderPanel,{title:"Order hardware",description:" Choose your crate and drag/add the cards you want to the crate below to see how the combination would look like.",crateMode:React.createElement(CrateMode,{items:f,mode:d,onClickMode:this.handleCrateModeChange}),crate:React.createElement(Crate,{cart:React.createElement(Cart,{nbrSlots:e[d],data:h.cart,itemHovered:c,onToggleProgress:this.handleToggleItemProgress,onToggleWarning:this.handleToggleItemWarning,onToggleOverlayRemove:this.handleToggleOverlayRemove,onClickRemoveItem:this.handleDeleteItem}),rules:Object.values(i).filter(function(a){return a})}),summaryPrice:React.createElement(OrderSumary,{currency:b,currentMode:d,modes:f,summary:h.cart.items,itemsData:h.cart.itemsData,onMouseEnterItem:this.handleMouseEnterItem,onMouseLeaveItem:this.handleMouseLeaveItem,onDeleteItem:this.handleDeleteItem,onDeleteAllItems:this.handleDeleteAllItems,onClickSelectItem:this.handleClickSelectItem}),form:React.createElement(OrderForm,{onClickSubmit:this.handleClickSubmit})})}))}}]),b}(React.PureComponent);ReactDOM.render(React.createElement(Shop,{data:data}),document.querySelector("#root-shop")); this.setState(_objectSpread({},this.state,{columns:_objectSpread({},this.state.columns,{cart:_objectSpread({},this.state.columns.cart,{itemsData:_objectSpread({},j)})}),rules:_objectSpread({},k)}))}},{key:"render",value:function render(){var a=this.state,b=a.currency,c=a.currentItemHovered,d=a.currentMode,e=a.crateModeSlots,f=a.crateModeItems,g=a.items,h=a.columns,i=a.rules;return React.createElement(DragDropContext,{onDragEnd:this.handleOnDragEnd},React.createElement(Layout,{className:"shop",aside:React.createElement(Backlog,{currency:b,items:g,data:h.backlog,onClickAddItem:this.handleClickAddItem}),main:React.createElement(OrderPanel,{title:"Order hardware",description:" Drag and drop the cards you want into the crate below to see how the combination would look like. If you have any issues with this ordering system, or if you need other configurations, email us directly anytime at sales@m-****.hk. The price is estimated and must be confirmed by a quote.",crateMode:React.createElement(CrateMode,{items:f,mode:d,onClickMode:this.handleCrateModeChange}),crate:React.createElement(Crate,{cart:React.createElement(Cart,{nbrSlots:e[d],data:h.cart,itemHovered:c,onToggleProgress:this.handleToggleItemProgress,onToggleWarning:this.handleToggleItemWarning,onToggleOverlayRemove:this.handleToggleOverlayRemove,onClickRemoveItem:this.handleDeleteItem}),rules:Object.values(i).filter(function(a){return a})}),summaryPrice:React.createElement(OrderSumary,{currency:b,currentMode:d,modes:f,summary:h.cart.items,itemsData:h.cart.itemsData,onMouseEnterItem:this.handleMouseEnterItem,onMouseLeaveItem:this.handleMouseLeaveItem,onDeleteItem:this.handleDeleteItem,onDeleteAllItems:this.handleDeleteAllItems,onClickSelectItem:this.handleClickSelectItem}),form:React.createElement(OrderForm,{onClickSubmit:this.handleClickSubmit})})}))}}]),b}(React.PureComponent);ReactDOM.render(React.createElement(Shop,{data:data}),document.querySelector("#root-shop"));

View File

@ -2,7 +2,7 @@ const shop_data = {
currentItemHovered: null, currentItemHovered: null,
currentMode: 'rack', currentMode: 'rack',
currency: 'EUR', currency: 'USD',
crateModeSlots: { crateModeSlots: {
rack: 21, rack: 21,
@ -22,11 +22,11 @@ const shop_data = {
crateModeItems: [{ crateModeItems: [{
id: 'rack', id: 'rack',
name: 'Rack mountable crate', name: 'Rack mountable crate',
price: 1000, price: 1450,
}, { }, {
id: 'desktop', id: 'desktop',
name: 'Desktop crate', name: 'Desktop crate',
price: 2000, price: 1450,
}], }],
items: { items: {
@ -34,20 +34,14 @@ const shop_data = {
'kasli': { 'kasli': {
id: 'kasli', id: 'kasli',
name: 'Kasli', name: 'Kasli',
price: 1000, price: 3600,
image: '/shop/graphic-02_kasli.svg', image: '/shop/graphic-02_kasli.svg',
specs: [ specs: [
'Artix 7 100T FPGA', 'FPGA core device, runs ARTIQ kernels, controls the EEMs.',
'4GB DDR3 SDRAM', '3 SFP 6GB/s slots for Ethernet or DRTIO.',
'128MB SPI Flash', '8 EEM connectors on board.',
'3 SFP 6GB/s slots', '4 MMCX clock outputs.',
'1 SATA 6GB/s connector', 'Price includes bitstream generation, flashing, testing, and firmware updates for 1 year (USD 1400).',
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
], ],
size: 'big', size: 'big',
type: 'kasli', type: 'kasli',
@ -94,21 +88,11 @@ const shop_data = {
}, },
'kasli-backplane': { 'kasli-backplane': {
id: 'kasli-backplane', id: 'kasli-backplane',
name: 'Kasli', name: 'Kasli + BP adapter',
price: 1000, price: 3830,
image: '/shop/graphic-02_kasli-with-backplane.svg', image: '/shop/graphic-02_kasli-with-backplane.svg',
specs: [ specs: [
'Artix 7 100T FPGA', 'Same as above, but with adapter that provides 4 additional EEM connectors',
'4GB DDR3 SDRAM',
'128MB SPI Flash',
'3 SFP 6GB/s slots',
'1 SATA 6GB/s connector',
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
], ],
size: 'big', size: 'big',
type: 'kasli-backplane', type: 'kasli-backplane',
@ -156,20 +140,16 @@ const shop_data = {
'bnc-dio': { 'bnc-dio': {
id: 'bnc-dio', id: 'bnc-dio',
name: 'BNC-DIO', name: 'BNC-DIO',
price: 1000, price: 450,
image: '/shop/graphic-02_BNC-DIO.svg', image: '/shop/graphic-02_BNC-DIO.svg',
specs: [ specs: [
'Artix 7 100T FPGA', 'Two banks of four digital channels each, with BNC connectors.',
'4GB DDR3 SDRAM', 'Each bank with individual ground isolation.',
'128MB SPI Flash', 'Per-bank switchable direction via on-board switches.',
'3 SFP 6GB/s slots', 'Per-channel switchable 50 Ohm termination with LED indicators.',
'1 SATA 6GB/s connector', 'Short circuit tolerance: infinite.',
'Clock recovery and distribution', 'Minimum pulse width: 3ns.',
'4 MMCX clock outputs', 'Max 150 MHz toggle rate with 50% duty cycle.'
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
], ],
size: 'big', size: 'big',
type: null, type: null,
@ -184,27 +164,17 @@ const shop_data = {
type: 'bnc-dio', type: 'bnc-dio',
icon: '/shop/icon-warning.svg', icon: '/shop/icon-warning.svg',
name: 'BNC-DIO', name: 'BNC-DIO',
message: 'This card needs a card that provides XXX connector (e.g. Kasli) at its left.', message: 'This card needs a card that provides a EEM connector (e.g. Kasli) at its left.',
}, },
}, },
}, },
'eem-octal': { 'sma-dio': {
id: 'eem-octal', id: 'sma-dio',
name: 'SMA-DIO', name: 'SMA-DIO',
price: 1000, price: 400,
image: '/shop/graphic-02_EEM-Octal.svg', image: '/shop/graphic-02_SMA-DIO.svg',
specs: [ specs: [
'Artix 7 100T FPGA', 'Same as above, but with SMA connectors.'
'4GB DDR3 SDRAM',
'128MB SPI Flash',
'3 SFP 6GB/s slots',
'1 SATA 6GB/s connector',
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
], ],
size: 'small', size: 'small',
type: null, type: null,
@ -216,30 +186,24 @@ const shop_data = {
clockOccupied: 0, clockOccupied: 0,
rules: { rules: {
resources: { resources: {
type: 'eem-octal', type: 'sma-dio',
icon: '/shop/icon-warning.svg', icon: '/shop/icon-warning.svg',
name: 'SMA-DIO', name: 'SMA-DIO',
message: 'This card needs a card that provides XXX connector (e.g. Kasli) at its left.', message: 'This card needs a card that provides a EEM connector (e.g. Kasli) at its left.',
}, },
}, },
}, },
'eem-16x': { 'rj45-dio': {
id: 'eem-16x', id: 'rj45-dio',
name: 'RJ45-DIO', name: 'RJ45-DIO',
price: 1000, price: 390,
image: '/shop/graphic-02_EEM-16x.svg', image: '/shop/graphic-02_RJ45-DIO.svg',
specs: [ specs: [
'Artix 7 100T FPGA', 'Supplies 16 LVDS pairs via 4 front-panel RJ45 connectors.',
'4GB DDR3 SDRAM', 'Each RJ45 supplies 4 LVDS DIOs.',
'128MB SPI Flash', 'Direction individually selectable for each signal via on-board switches.',
'3 SFP 6GB/s slots', 'No galvanic isolation.',
'1 SATA 6GB/s connector', 'Higher speed and lower jitter than the isolated SMA and BNC DIO cards.'
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
], ],
size: 'small', size: 'small',
type: null, type: null,
@ -251,30 +215,27 @@ const shop_data = {
clockOccupied: 0, clockOccupied: 0,
rules: { rules: {
resources: { resources: {
type: 'eem-16x', type: 'rj45-dio',
icon: '/shop/icon-warning.svg', icon: '/shop/icon-warning.svg',
name: 'RJ45-DIO', name: 'RJ45-DIO',
message: 'This card needs a card that provides XXX connector (e.g. Kasli) at its left.', message: 'This card needs a card that provides two EEM connectors (e.g. Kasli) at its left.',
}, },
}, },
}, },
'urukul': { 'urukul': {
id: 'urukul', id: 'urukul',
name: 'Urukul', name: 'Urukul',
price: 1000, price: 2350,
image: '/shop/graphic-02_Urukul.svg', image: '/shop/graphic-02_Urukul.svg',
specs: [ specs: [
'Artix 7 100T FPGA', '4 channel 1GS/s DDS.',
'4GB DDR3 SDRAM', 'Output frequency (-3 dB): <1 to >400 MHz.',
'128MB SPI Flash', 'Nominal max output power 10 dBm.',
'3 SFP 6GB/s slots', 'Digital step attenuator 0 to -31.5dB.',
'1 SATA 6GB/s connector', 'RF switch (1ns temporal resolution), 70dB isolation.',
'Clock recovery and distribution', 'AD9910 or AD9912 chip.',
'4 MMCX clock outputs', 'By default, we use the AD9910 as it provides more features. If you need the higher frequency resolution of the AD9912, leave us a note.',
'4 channel USB connectivity', 'External 5W power amplifier is available separately, leave us a note if interested.'
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
], ],
size: 'small', size: 'small',
type: 'urukul', type: 'urukul',
@ -295,34 +256,22 @@ const shop_data = {
type: 'urukul', type: 'urukul',
icon: '/shop/icon-warning.svg', icon: '/shop/icon-warning.svg',
name: 'Urukul', name: 'Urukul',
message: 'This card needs a card that provides XXX connector (e.g. Kasli) at its left.', message: 'This card needs a card that provides EEM and clocking connectors (e.g. Kasli) at its left.',
}, },
}, },
}, },
'zotino': { 'zotino': {
id: 'zotino', id: 'zotino',
name: 'Zotino', name: 'Zotino',
price: 1000, price: 1600,
image: '/shop/graphic-02_zotino.svg', image: '/shop/graphic-02_zotino.svg',
specs: [ specs: [
'Artix 7 100T FPGA', '32-channel DAC.',
'4GB DDR3 SDRAM', '16-bit resolution.',
'128MB SPI Flash', '1 MSPS shared between all channels.',
'3 SFP 6GB/s slots', 'Output voltage +-10V.',
'1 SATA 6GB/s connector', 'HD68 connector with all channels.',
'Clock recovery and distribution', 'Channels can also be broken out to BNC or SMA using IDC-BNC, IDC-SMA or IDC-MCX cards.'
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
'4 EEM on backplane extension',
'4 EEM on backplane extension',
'4 EEM on backplane extension',
'4 EEM on backplane extension',
'4 EEM on backplane extension',
'4 EEM on backplane extension',
'4 EEM on backplane extension',
], ],
size: 'small', size: 'small',
type: 'zotino', type: 'zotino',
@ -350,20 +299,19 @@ const shop_data = {
type: 'zotino', type: 'zotino',
icon: '/shop/icon-warning.svg', icon: '/shop/icon-warning.svg',
name: 'Zotino', name: 'Zotino',
message: 'This card needs a card that provides XXX connector (e.g. Kasli) at its left.', message: 'This card needs a card that provides a EEM connector (e.g. Kasli) at its left.',
}, },
}, },
}, },
'idc-bnc-adapter': { 'idc-bnc-adapter': {
id: 'idc-bnc-adapter', id: 'idc-bnc-adapter',
name: 'IDC-BNC', name: 'IDC-BNC',
price: 1000, price: 160,
image: '/shop/graphic-02_IDC-BNC-adapter.svg', image: '/shop/graphic-02_IDC-BNC-adapter.svg',
specs: [ specs: [
'Artix 7 100T FPGA', 'Breaks out analog signals from Zotino or HD68-IDC to BNC connectors.',
'4GB DDR3 SDRAM', 'Each card provides 8 channels.',
'128MB SPI Flash', 'Breaking out all 32 channels from a Zotino requires 8 IDC-BNC cards.'
'3 SFP 6GB/s slots',
], ],
size: 'big', size: 'big',
type: 'idc-bnc', type: 'idc-bnc',
@ -385,20 +333,10 @@ const shop_data = {
'hd68-idc-adapter': { 'hd68-idc-adapter': {
id:'hd68-idc-adapter', id:'hd68-idc-adapter',
name: 'HD68-IDC', name: 'HD68-IDC',
price: 1000, price: 150,
image: '/shop/graphic-02_HD68.svg', image: '/shop/graphic-02_HD68.svg',
specs: [ specs: [
'Artix 7 100T FPGA', 'Connects an external HD68 cable to IDC-BNC, IDC-SMA or IDC-MCX cards.',
'4GB DDR3 SDRAM',
'128MB SPI Flash',
'3 SFP 6GB/s slots',
'1 SATA 6GB/s connector',
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
], ],
size: 'small', size: 'small',
type: 'hd68', type: 'hd68',
@ -433,20 +371,16 @@ const shop_data = {
'novo': { 'novo': {
id: 'novo', id: 'novo',
name: 'Novo', name: 'Novo',
price: 1000, price: 1600,
image: '/shop/graphic-02_Novo.svg', image: '/shop/graphic-02_Novo.svg',
specs: [ specs: [
'Artix 7 100T FPGA', '8-channel ADC.',
'4GB DDR3 SDRAM', '16-bit resolution.',
'128MB SPI Flash', '1.5 MSPS simultaneously on all channels.',
'3 SFP 6GB/s slots', 'When used with ARTIQ-Python driver, effective sample rate is lower.',
'1 SATA 6GB/s connector', 'Digitally programmable input gain.',
'Clock recovery and distribution', 'Full-scale input ranges between +-10mV and +-10V.',
'4 MMCX clock outputs', 'Supports SU-Servo laser intensity stabilization servo in conjunction with Urukul.'
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
], ],
size: 'big', size: 'big',
type: 'novo', type: 'novo',
@ -467,27 +401,21 @@ const shop_data = {
type: 'novo', type: 'novo',
icon: '/shop/icon-warning.svg', icon: '/shop/icon-warning.svg',
name: 'Novo', name: 'Novo',
message: 'This card needs a card that provides XXX connector (e.g. Kasli) at its left.', message: 'This card needs a card that provides EEM connectors (e.g. Kasli) at its left.',
}, },
} }
}, },
'koster': { 'koster': {
id: 'koster', id: 'koster',
name: 'Koster', name: 'Koster',
price: 1000, price: 550,
image: '/shop/graphic-02_Koster.svg', image: '/shop/graphic-02_Koster.svg',
specs: [ specs: [
'Artix 7 100T FPGA', 'Camera input interface card.',
'4GB DDR3 SDRAM', 'Supports some EMCCD cameras.',
'128MB SPI Flash', 'Allows image processing to occur in the FPGA with lower latency.',
'3 SFP 6GB/s slots', 'Existing stack supports summing over rectangular ROIs and reporting the result to ARTIQ kernels.',
'1 SATA 6GB/s connector', 'Camera signal is entirely processed in the Kasli FPGA.',
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
], ],
size: 'small', size: 'small',
type: 'koster', type: 'koster',
@ -495,40 +423,34 @@ const shop_data = {
nbrSlotMin: 0, nbrSlotMin: 0,
nbrSlotMax: 0, nbrSlotMax: 0,
nbrClockMax: 0, nbrClockMax: 0,
slotOccupied: 3, slotOccupied: 2,
clockOccupied: 0, clockOccupied: 0,
rules: { rules: {
connectors: { connectors: {
type: 'koster', type: 'koster',
icon: '/shop/icon-reminder.svg', icon: '/shop/icon-reminder.svg',
name: 'Koster', name: 'Koster',
message: 'This configuration uses 3 EEM connectors. If you prefer to use 1 or 2 EEM connectors, please inform us by leaving an additional note.', message: 'This configuration uses 2 EEM connectors. If you prefer to use 1 or 3 EEM connectors, please inform us by leaving an additional note.',
}, },
resources: { resources: {
type: 'koster', type: 'koster',
icon: '/shop/icon-warning.svg', icon: '/shop/icon-warning.svg',
name: 'Koster', name: 'Koster',
message: 'This card needs a card that provides XXX connector (e.g. Kasli) at its left.', message: 'This card needs a card that provides EEM connectors (e.g. Kasli) at its left.',
}, },
} }
}, },
'clocker': { 'clocker': {
id: 'clocker', id: 'clocker',
name: 'Clocker', name: 'Clocker',
price: 1000, price: 525,
image: '/shop/graphic-02_Clocker.svg', image: '/shop/graphic-02_Clocker.svg',
specs: [ specs: [
'Artix 7 100T FPGA', 'Distribute a low jitter clock signal among cards.',
'4GB DDR3 SDRAM', '2 inputs.',
'128MB SPI Flash', '10 outputs including 4 SMAs.',
'3 SFP 6GB/s slots', 'Frequency up to 1GHz.',
'1 SATA 6GB/s connector', 'Low jitter <100fs RMS.'
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
], ],
size: 'small', size: 'small',
type: 'clocker', type: 'clocker',
@ -553,23 +475,18 @@ const shop_data = {
}, },
}, },
}, },
'stabiliser': { 'stabilizer': {
id: 'stabiliser', id: 'stabilizer',
name: 'Stabilizer', name: 'Stabilizer',
price: 1000, price: 3000,
image: '/shop/graphic-02_Stabiliser.svg', image: '/shop/graphic-02_Stabilizer.svg',
specs: [ specs: [
'Artix 7 100T FPGA', 'CPU-based dual-channel fast servo.',
'4GB DDR3 SDRAM', '400MHz STM32H743ZIT6.',
'128MB SPI Flash', 'Dual 16bit ADC with x2, x5, x10 PGA (2MS/s).',
'3 SFP 6GB/s slots', '16bit AD5542A DAC (1us settling time).',
'1 SATA 6GB/s connector', '100Base-T Ethernet.',
'Clock recovery and distribution', 'Can be controlled by Kasli or work stand-alone with PoE supply.'
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
], ],
size: 'small', size: 'small',
type: null, type: null,
@ -583,20 +500,15 @@ const shop_data = {
'mirny': { 'mirny': {
id: 'mirny', id: 'mirny',
name: 'Mirny', name: 'Mirny',
price: 1000, price: 2660,
image: '/shop/graphic-02_Mirny.svg', image: '/shop/graphic-02_Mirny.svg',
specs: [ specs: [
'Artix 7 100T FPGA', '4-channel Wide-band PLL/VCO-based microwave frequency synthesiser.',
'4GB DDR3 SDRAM', '53 MHz to >4 GHz.',
'128MB SPI Flash', 'Up to 13.6 GHz when using the mezzanine.',,
'3 SFP 6GB/s slots', 'Much higher frequency resolution than Urukul.',
'1 SATA 6GB/s connector', 'Lower jitter and phase noise.',
'Clock recovery and distribution', 'Large frequency changes take several milliseconds.',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
], ],
size: 'small', size: 'small',
type: null, type: null,
@ -611,7 +523,7 @@ const shop_data = {
type: 'mirny', type: 'mirny',
icon: '/shop/icon-warning.svg', icon: '/shop/icon-warning.svg',
name: 'Mirny', name: 'Mirny',
message: 'This card needs a card that provides XXX connector (e.g. Kasli) at its left.', message: 'This card needs a card that provides a EEM connector (e.g. Kasli) at its left.',
}, },
}, },
}, },
@ -630,17 +542,17 @@ const shop_data = {
'kasli', 'kasli',
'kasli-backplane', 'kasli-backplane',
'bnc-dio', 'bnc-dio',
'eem-octal', 'sma-dio',
'eem-16x', 'rj45-dio',
'urukul', 'urukul',
'mirny',
'zotino', 'zotino',
'idc-bnc-adapter', 'idc-bnc-adapter',
'hd68-idc-adapter', 'hd68-idc-adapter',
'novo', 'novo',
'koster', 'koster',
'clocker', 'clocker',
'stabiliser', 'stabilizer',
'mirny'
], ],
}, },