시스템 버스(Lattice ice40)에 연결
타겟은 Lattice iCE40이다. iCE40은 내부에 시스템 버스라고 불리는 것을 가지고 있다. 매우 간단한 버스로 접근은 비교적 간단하다. 잡지의 기사에서는 전 소스 실려 있지 않다. 200행을 넘기 때문에 여기에서도 일부로 하자.
덧붙여 전문은 gist 에 디버그의 생생한 코멘트 아웃도 포함해 준다.
read_spi_data16
def read_spi_data16(self):
debug_v:uint3 = 0
debug_v = 4
#self.debug.wr(4)
self.write_data(0x06, 0x18)
self.write_data(0x0A, 0xC0)
self.write_data(0x0D, 0xFF)
while True:
irq_status = self.read_data(0x06)
irq_trdy = (irq_status >> 4) & 1
if irq_trdy == 1 :
self.write_data(0x06, 0x10)
break
self.write_data(0x0D, 0xFF)
#self.debug.wr(5)
debug_v = 1
while True:
irq_status = self.read_data(0x06)
irq_rrdy = (irq_status >> 3) & 1
debug_v = 7 ^ debug_v
# self.debug.wr(debug_v)
if irq_rrdy == 1:
self.write_data(0x06, 0x08)
break
data0 = self.read_data(0x0E) << 8
debug_v = 2
#self.debug.wr(2)
while True:
irq_status = self.read_data(0x06)
irq_rrdy = (irq_status >> 3) & 1
if irq_rrdy == 1:
debug_v = 4 ^ debug_v
#self.debug.wr(debug_v)
self.write_data(0x06, 0x08)
break
data1 = self.read_data(0x0E)
#self.debug.wr(1)
self.write_data(0x0A, 0x80)
return (data0 | data1)
메소드 read_spi_data16은 PmodALS에서 데이터를 읽는 프로그램입니다. write_data와 read_data가 실제로 시스템 버스와 통신하고 있습니다.
write_data
def write_data(self, addr:uint8, data:uint8):
self.rw(1)
self.addr(addr)
self.data_out(data)
clkfence()
self.stb(1)
clkfence()
wait_value(1, self.ack)
clkfence()
self.stb(0)
read_data
def read_data(self, addr:uint8):
data:uint8 = 0
self.rw(0)
self.addr(addr)
clkfence()
self.stb(1)
clkfence()
wait_value(1, self.ack)
data = self.data_in.rd()
clkfence()
self.stb(0)
return data
clkfence라는 특별한 함수가 순서성을 추월하지 않도록 제어하고 있다.
Polyphony는 미래에 조금 더이 옆을 편리하게 만들 것이라고 생각합니다. 단, 클럭이라는 생각과 컴파일러가 파이프라인을 생성한다는 발상은 현저하게 궁합이 나쁘다는 것을 알고 있다. 이 부분의 브레이크 스루가 있으면 다음 세대의 HLS에 다가갈지도 모른다.
개발 과정에서 Arty Z7을 디지애나 대신.
Reference
이 문제에 관하여(시스템 버스(Lattice ice40)에 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryos36/items/10e501a3604bcc35a5f3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)