#Verilog
Explore tagged Tumblr posts
Note
Assembly is not enough, i need to fuck my processor
VHDL or Verilog. I don't have any experience in Verilog, but have made some simple stuff on FPGAs with VHDL; it's pretty cool, but also quite frustrating since it's simultaneously the lowest level programming you'll probably ever do (as it is changing real hardware), but it's also quite abstract, so you don't really know what the compiler does; this makes fixing (heisen) bugs real tricky.
If you ment 'fuck my processor' more literally I recommend something with a LGA socket, because you will bend the pins of a PGA CPU. Also dry it off before reinserting it in your motherboard. I don't know how you'll get any real pleasure from it, but feel free to try!
5 notes
·
View notes
Text
Wrap030-ATX Remembers

No general-purpose computer will do much without a good amount of Random Access Memory for transient storage of code and data. Now that I have confirmed basic operation of CPU, bus controller, ROM, and serial, it's time to turn my attention to main system memory.
Every homebrew computer I've built to date, including previous iterations of the Wrap030 project, has used Static RAM. Static RAM is nearly as simple as peripherals can be — give it an address, assert a Chip Enable and a Read or Write strobe signal, wait a bit, and release. Done, cycle complete. If you don't need to retrieve some data for a good long while, it's no matter so long as the chip still has power. For a small system, SRAM is reliable and dead simple to use.
The problem with SRAM is it is also very expensive. The 2MB of SRAM I had on the previous iteration of Wrap030 cost over $20 — and it's still far from enough to run an operating system like Unix System V, NetBSD, Linux, etc. This is the reason computers generally use Dynamic RAM for primary system memory.
The difference is SRAM uses several transistors to create a flip-flop for storing each and every bit of memory, whereas DRAM uses a capacitor to store each bit of memory. This reduces manufacturing costs and increases storage density, but does come with some trade-offs. Most notably, the capacitors that store bits in DRAM will lose their charge — and the stored data with it — after a rather brief period of time. This means the DRAM capacitors need to be topped off regularly in a process known as a refresh cycle.
Another complication of using DRAM is the bus interface has been changed to allow much larger storage capacities without the physical chip package growing to absurd sizes. Instead of the chip accepting the entire address at once, it expects to be given a Row address (along with a Row Address Strobe [RAS#]) then a Column address (along with a Column Address Strobe [CAS#]), with myriad specific timing requirements for when each signal should be asserted and deasserted.
In short, DRAM is much more difficult to interface with compared to SRAM, so I've never really gotten around to it.
With one of the long term goals of this project being running a *nix operating system though, I'm going to need the larger memory that DRAM affords. So i made provision for a CPLD to serve as a dedicated DRAM controller on the Wrap030-ATX motherboard and added a couple 72-pin SIMM slots. In theory this setup should be able to support up to 256MB of RAM (if rare 128MB SIMMs should fall into my hands...).
So where do we turn when dealing with complicated timing with multiple modes and a bunch of I/O? Why, Finite State Machines, of course! That bit where the DRAM expects a row address for a little while, that's a state. And the following bit where the DRAM expects a column address is another state. And then another state to make sure the DRAM has enough time to write or fetch the data. The round it out with one last state to tell the CPU data is ready.
What about that weird refresh timing? Well, that's just few more states for the state machine. And then one last "idle" state that waits for a refresh timing counter to hit 0 or for the CPU to start a bus cycle. Laid out like that, the DRAM controller became a state machine with 7 or 8 states, a counter, and an address multiplexer.
The logic actually came together easier than expected. Not completely without bugs of course.
There's this note in the datasheets about startup initialization where the DRAM should not be accessed 200μs after power on, and there should be 8 refresh cycles before the first access. Initially I had built this entire sequence into my logic. It consumed a ton of resources and didn't really work right.
I realized that my reset circuit held the CPU in reset for longer than 200μs on power on, so I was guaranteed that first initialization time. So I removed that startup delay from my DRAM controller logic, and made a few tweaks to the state machine so it could do 8 back-to-back refresh cycles after reset.
I was able to successfully write to DRAM and read that data back!
That much proved to be the easy part. The next steps were confirming DRAM accesses worked reliably, that I had the order of my byte select signals correct, that I could identify the amount of installed memory, and that all of the installed memory was working. These are programming problems, not logic problems, and I am not a strong programmer. On top of that, not only am I working with unproven DRAM logic, but I'm also using untested SIMMs that I had picked up from Computer Reset.
I quickly ran into errors, but was it a problem with my logic? A problem with my timing? A problem with the SIMMs?
I had a large back of 72-pin SIMMs, split fairly evenly between Fast Page Mode (FPM) and Extended Data Output (EDO) types. I tried them all. Some would pass the tests for nearly all addresses but fail at the end. Some seemed to have a stuck bit. Some were just plain bad and gave errors everywhere. It didn't really answer the question about whether my logic was bad, but results were consistent enough for me to think that maybe the logic might be ok.
And then finally I came across a pair of HP-branded 8MB EDO SIMMs that passed a simple write-read test without error ...
... right around the time my serial port stopped working. But the memory test was passing, and I could at least see the serial output on the logic analyzer.
The serial port problem was a bit setback. It had been working but suddenly wasn't. Clearly the UART itself was working, I just wasn't getting anything past the level shifter. Well that at least gave me a starting point of where to look. Sure enough, one of the 12V supply pins was not well soldered. Thankfully a quick fix.
Back to testing memory, I started writing a program to identify the size of the installed SIMM and write a register I added to the DRAM controller to configure the specific geometry of the installed memory. See, DRAM has another lovely quirk — chips of the same size may have a different configuration of Row and Column sizes. For instance one chip may have a 9-bit Column and a 10-bit Row, but the next may have a 10-bit Column and a 9-bit Row, and both are the same size. If the DRAM controller just assumes 12-bit Row and Column (the largest supported by 72-pin SIMMs), then there will be gaps in the memory map that will need to be accounted for in software (using MMU, for example). If the DRAM controller knows the geometry of the installed memory, then it can present the memory to the CPU as one contiguous block of memory.
And that's where I found my next bug. The system would just hang when trying to write to that DRAM controller configuration register.
... because I had forgotten to complete that part of the state machine. The result was the state machine would end up in a state for writing to the configuration register, but then it couldn't get out of it. Once I added the missing condition to the state machine logic I was able to correctly identify the geometry and size for my installed memory!
Wow that was long. This has been the biggest, most involved step in the process of bringing up this computer yet. It turns out there are a lot of moving pieces that have to all work together to get the computer running code from ROM and reading/writing DRAM.
Now that I have my main memory working, I should be able to get some software running. I'm hoping to at least have BASIC running in time for VCFSW at the end of June.
#homebrew computing#vintage computing#motorola#mc68030#motorola 68k#assembly programming#motorola 68030#vcf#VCFSW#vcf southwest#verilog#Dynamic RAM#CPLD#troubleshooting#wrap030 atx
32 notes
·
View notes
Text
youtube
How to Download ModelSim Simulator for FREE! | Step by Step Guide in HINDI - [4 Min]
Welcome to our comprehensive tutorial on how to download ModelSim Simulator, the leading industry-standard digital simulation tool. In this step-by-step guide, we will walk you through the entire process, ensuring a hassle-free installation experience. ModelSim offers advanced simulation capabilities for digital designs, making it indispensable for hardware engineers, students, and enthusiasts alike.
In this video, we provide you with detailed instructions to download ModelSim Simulator effortlessly. Starting from checking the system requirements to ensuring optimal performance, we cover every essential aspect. We also discuss the licensing process and provide solutions to common installation errors that you may encounter. Our aim is to equip you with the knowledge and confidence to successfully install and utilize ModelSim Simulator in your projects.
Don't miss out on harnessing the power of ModelSim Simulator for your digital simulation needs. Watch this tutorial now and kickstart your journey towards efficient hardware design and verification!
🔔 Subscribe to our channel for more informative tutorials and updates! 🔔
Subscribe to "Learn And Grow Community"
YouTube : https://www.youtube.com/@LearnAndGrowCommunity
LinkedIn Group : linkedin.com/company/LearnAndGrowCommunity
Blog : https://LearnAndGrowCommunity.blogspot.com/
Facebook : https://www.facebook.com/JoinLearnAndGrowCommunity/
Twitter Handle : https://twitter.com/LNG_Community
DailyMotion : https://www.dailymotion.com/LearnAndGrowCommunity
Instagram Handle : https://www.instagram.com/LearnAndGrowCommunity/
Follow #LearnAndGrowCommunity
#ModelSimSimulator#DigitalSimulation#HardwareEngineering#InstallationGuide#Tutorial#SystemRequirements#SimulationSoftware#HardwareDesign#vhdltutorial#vhdl#vhdlprogramming#verilog#veriloghdl#verilogtutorial#fpga#simulationsoftware#howtodownload#Youtube
2 notes
·
View notes
Video
youtube
Implement/Add Multiple Time Delays to 1-bit Signals, RTL Code and Testbe...
0 notes
Text
Speculative Decoding for Verilog:
Excerpt from PDF: Speculative Decoding for Verilog: Speed and Quality, All in One Changran Xu1,3,†, Yi Liu1,3,†, Yunhao Zhou1,3, Shan Huang2,3, Ningyi Xu2, and Qiang Xu1,3 1The Chinese University of Hong Kong, Shatin, Hong Kong S.A.R. 2Shanghai Jiao Tong University, Shanghai, China 3National Technology Innovation Center for EDA, Nanjing, Jiangsu, China Abstract—The rapid advancement of large…
0 notes
Text
i think i just found the single worst, most unreadable, least maintainable piece of code i have ever written
its an entire module built out of assign statements to output ports and ?: multiplexers
official middle finger to past me for making present me try to understand this
1 note
·
View note
Text
celebrating fall with fletcher's checksum
This post originally appeared on my website.
why are checksums useful for fpga development?
Checksum functions are useful for error detection and data integrity. With respect to FPGA architecture development, a checksum can ensure the system is able to retain its state. For example, an FPGA programmed to behave like an AND gate should not start to act like an OR gate due fluctuations in voltage or temperature. Such problems may be caught by computing the checksum of the bitstream before configuring the FPGA, operating the device in the lab, and then extracting the bitstream and re-computing the checksum to ensure it has not changed.
The last two FPGAs that I worked on-with Indiana University's SAIL-IN Lab and the QuickLogic Corporation-used a scan chain configuration interface which lent itself well to bitstream verification via checksum. The scan chain acts like a serial shift register, stringing together all the configuration chain flip-flops in the FPGA fabric. As the bitstream flows through the head of the scan chain, one bit at a time, its checksum may be computed; and later re-computed as it flows out of the tail. For context, imagine a small, thirty-two flop scan chain and the corresponding bitstream, 0xdeadbeef. On the way in, the Fletcher's (32-bit) checksum will be 0xf13b. If the post-configuration checksum does not match, the engineers would know that there is an issue with the FPGA architecture.
Fletcher's checksum also produces check bytes (or a "tag"), which can be appended to the end of the original data, such that the new checksum of the data and the check bytes is zero. For the example bitstream 0xdeadbeef, the resulting check bytes are 0xd2f1. And the checksum of 0xdeadbeefd2f1 is 0x0.
fletcher's checksum in systemverilog
Based mostly on the Wikipedia entry for Fletcher's checksum, I produced a parameterized, three-state module which computes the checksum and check bytes of a data stream. The SystemVerilog closesly follows the below psuedo-code. For the Fletcher-32 checksum, data arrives as 16-bit half-words.
Eventually, I'd like to wrap it in a SPI interface and submit it to TinyTapeout, but for now here's the bare RTL. The most up-to-date code is also available on GitHub:
#engineering#computer engineering#fpga#verilog#systemverilog#hardware design#engineering student#studyblr
0 notes
Text
update:
cant wait to divide in verilog :D this is so easy!
3 notes
·
View notes
Text
axi4 stream dma
Elevate your system's data handling capabilities with our cutting-edge Digital Blocks AXI4 Stream DMA controller. Engineered for efficiency and speed, this module facilitates seamless data transfers between various peripherals and memory units. Incorporating the latest AXI4 protocol standards, this DMA controller ensures smooth and reliable data transmission for various applications. Visit Us https://www.digitalblocks.com/dma-verilog-ip-cores/
0 notes
Text
i actually legitimately hate my life
#THIS STUPID ASS PROFESSOR IS TELLING ME TO ASK THE TAS…. WELL UNFORTUNATELY FOR ALL OF US#EMIL. DOES NOT. KNOW VERILOG#LIKE GIRL I JUST WANT TO SHOW UP TO YOUR OFFICE HOURS FOR LIKE TEN MINUTES#HATE EVERYTHIBGGGGGGGGGGGGGGGGGGGGGF#AND COPYING MY LECTURE PROFESSOR ON THE EMAIL….OK BITCH!!!!!!!!! WHATEVER
1 note
·
View note
Text
Wrap030-ATX First Code
This is a big step forward — Wrap030-ATX, my microATX form factor 68030-based homebrew computer, is running code from ROM. Externally, all it's doing is blinking an LED, but that LED is software-controlled, with a sizable delay loop between blinks to make it something that is human-visible.
Getting to this point took quite a bit of work after the free run tests. Nearly all of the logic on this project is in CPLDs. Of note here is the primary bus controller, which handles access timing, bus cycle termination, and a settings register.
For the computer to run code, it has to be able to read from ROM. Reading from ROM requires the bus controller to decode the CPU address, assert the ROM's Chip Enable (CE#) and Output Enable (OE#) signals, wait the appropriate length of time for the ROM to output stable data on the bus, and then assert the appropriate bus cycle termination signal for an 8-bit peripheral (DSACK0#).

Once I had the minimal functionality for ROM access cycles, I was able to repeat the free run test, but this time with only the to 8 bits of the data bus (D[31:24]) pulled low.
Once I confirmed the ROM access cycle logic was working, I added the bus controller register access cycle logic. The bus controller has a single settings register that will control the Debug LED, startup ROM overlay, and ATX soft power. The CPU will need to be able to write to this register, and reading from it is helpful as well.
The bus controller logic is fully synchronous and managed by a state machine, so all that was needed to add the settings register was a couple new states for the state machine — one for read and one for write.
Put all that together, and we have a computer that can run the most basic of programs, with just a single LED for output.
The next thing I need to get working is a serial port. Everything that comes after this point will be a lot easier if I can output helpful debugging messages over serial.
#homebrew computing#motorola#mc68030#motorola 68k#verilog#cpld#motorola 68030#assembly programming#wrap030 atx#retro computing
26 notes
·
View notes
Text
youtube
Use this trick to Save time : HDL Simulation through defining clock
Why is this trick useful? Defining a clock in your simulation can save you time during simulation because you don't have to manually generate the clock signal in your simulation environment. Wanted to know how to define and force clock to simulate your digital system. Normally define clock used to simulate system with clock input. But I am telling you this trick for giving values to input ports other than clock. It will help you to save time in simulation because you do not need to force values to input ports every time. Lets brief What we did - gave some clock frequency to input A, like we gave 100. Than we made Half the frequency of clock to 50 and gave it to Input B. In similar way if we have 3rd input too we goanna half the frequency again to 25 and would give to next input.
Subscribe to "Learn And Grow Community"
YouTube : https://www.youtube.com/@LearnAndGrowCommunity
LinkedIn Group : https://www.linkedin.com/groups/7478922/
Blog : https://LearnAndGrowCommunity.blogspot.com/
Facebook : https://www.facebook.com/JoinLearnAndGrowCommunity/
Twitter Handle : https://twitter.com/LNG_Community
DailyMotion : https://www.dailymotion.com/LearnAndGrowCommunity
Instagram Handle : https://www.instagram.com/LearnAndGrowCommunity/
Follow #LearnAndGrowCommunity
#HDL Design#Digital Design#Verilog#VHDL#FPGA#Digital Logic#Project#Simulation#Verification#Synthesis#B.Tech#Engineering#Tutorial#Embedded Systesm#VLSI#Chip Design#Training Courses#Software#Windows#Certification#Career#Hardware Design#Circuit Design#Programming#Electronics Design#ASIC#Xilinx#Altera#Engineering Projects#Engineering Training Program
2 notes
·
View notes
Video
youtube
Implement/Add Multiple Time Delays to 1-bit Signals, RTL Code and Testbe...
1 note
·
View note
Text
got to campus 2 hours early to study for my test and an hour and a half later I don't really feel any more prepared for the test but i did beat the password game so what's really important here
1 note
·
View note
Text
That is a very neat idea!
If you like things like that you might want to look into VHDL ( I learned that... some years ago, but have not touched it since ) or Verilog.
They are... programming languages for making logic gate logic.
You combine that with an FPGA, which is essentially a whole lot of NAND gates ( Which as I said, can represent any logic gate system ), and then you can make hardware... via software.
And yes, these essentially do things like your idea. Things that would take a CPU aaaaages to do, can be done very very fast. So you "just" have normal C code, but if it runs onto one of the problems it have hardware for, it uses the hardware.
This is also how graphics cards work, or just floating point operations!
It is insanely cool! :D
What is half-adder and full-adder combinational circuits?
So this question came up in the codeblr discord server, and I thought I would share my answer here too :3
First, a combinational circuit simply means a circuit where the outputs only depends on its input. ( combinational means "Combine" as in, combining the inputs to give some output )
It is a bit like a pure function. It is opposed to circuits like latches which remembers 1 bit. Their output depends on their inputs AND their state.
These circuits can be shown via their logic gates, or truth tables. I will explain using only words and the circuits, but you can look up the truth tablet for each of the circuits I talk about to help understand.

Ok, so an in the case of electronics is a circuit made with logic gates ( I... assume you know what they are... Otherwise ask and I can explain them too ) that adds 2 binary numbers, each which have only 1 character.
So one number is 1 or 0
And the other number is 1 or 0
So the possible outputs are are 0, 1 and 2.
Since you can only express from 0 to 1 with one binary number, and 0 to 3 with 2, we need to output 2 binary numbers to give the answer. So the output is 2 binary numbers
00 = 0
01 = 1
10 = 2
11 = 3 // This can never happen with a half adder. The max possible result is 2
Each character will be represented with a wire, and a wire is a 0 if it is low voltage (usually ground, or 0 volts) and a 1 if it is high voltage (Voltage depends. Can be 5 volts, 3.3, 12 or something else. )
BUT if you only use half adders, you can ONLY add 2 single character binary numbers together. Never more.
If you want to add more together, you need a full adder. This takes 3 single character binary numbers, and adds them and outputs a single 2 character number.
This means it have 3 inputs and 2 outputs.
We have 2 outputs because we need to give a result that is 0, 1, 2 or 3
Same binary as before, except now we CAN get a 11 (which is 3)
And we can chain full adders together to count as many inputs as we want.
So why ever use a half adder? Well, every logic gate cirquit can be made of NAND (Not and) gates, so we usually compare complexity in how many NAND gates it would take to make a circuit. More NAND gates needed means the circuit is slower and more expensive to make.
A half adder takes 5 NAND gates to make
A full adder takes 9 NAND gates.
So only use a full adder if you need one.
Geeks for Geeks have a page for each of the most normal basic cirquits:
I hope that made sense, and was useful :3
40 notes
·
View notes
Text
Innovative Arithmetic Core Projects for final years
Arithmetic Core projects are the true long-term direction in the evolution of mathematics today. Takeoff Projects is the spearhead of Flashpoint Projects, an arrowhead in the fight to bring about a new era of the computing prowess in the field of precision and speed standing at the Peak is digital processing power, and these projects are a combination of numerical exactness and computational effectiveness. Arithmetic Core is the key to creating the essential components of any technological device, including embedded systems and supercomputers as it focuses exhaustively on the fundamental arithmetic operations such as addition, subtraction, multiplication, and division. These projects are very meticulous in their where they aim to reach the peak performance while using the least resources and they are therefore applicable in industries like the industrial and infrastructure. Venture with us as we travel deeply into the centre of arithmetic calculation, where innovation and feature take the lead and unfold the advance of digital technology.
Based on customers' requests, our expert staff designs Arithmetic Cores for various products, ranging from embedded systems to high-performance computing. Using the cutting edge algorithms with the accurate design we achieve outstanding processing speed and precision. Our technology outperforms what is available in the market. Putting emphasis on reliability and versatility in mind, we develop the Arithmetic Core for the mission of corporations like the aerospace, telecommunications and the more. With the collaborative innovation which is fuelled mercilessly by the dedication projects, Takeoff projects are continuing to surprise boundary pushing definition of arithmetic computation in cutting edge technology, while transforming the technical aspects of digital space.
Latest:
A Lightweight True Random Number Generator for Root of Trust Applications
An Ultra-Efficient Approximate Multiplier With Error Compensation for Error-Resilient Applications
AxPPA Approximate Parallel Prefix Adders
Trendy:
Reversible Logic Based 1-bit Comparator using QCA
Fast Super singular Isogeny DiffieHellman and Key Encapsulation Using a Customized Pipelined Montgomery Multiplier
Implementation of Turbo Encoder and Decoder
An Optimized M-Term Karatsuba-Like Binary Polynomial Multiplier for Finite Field Arithmetic
Design of Approximate Radix-256 Booth Encoding for Error-Tolerant Computing
Standard:
Area Delay and Energy Efficient Multi-Operand Binary Tree Adder
Comparison of High Speed Adders Trade Area and Power
32-Bit Mac Unit Using Vedic Multiplier and Carry Save Adder
BCD Adder Designs Based on Three-Input XOR and Majority Gates
High Performance Filter Design using Adders and Multipliers
Finally, Takeoff Projects, being at the forefront of Arithmetic Core Projects, serves as a guide. By means of hard work, time consuming research, creative engineering, and unyielding persistence, we have created our book, which I am sure will become a great asset in the teaching of arithmetic. Our custom Arithmetic Core products, that have the marriage of efficiency, accuracy, and flexibility as its hallmarks, are absolutely primed to redefine this world changing industries. With a solid conviction that we have already arrived at the future of arithmetic processing and while we continue to push the boundaries of technological development, Takeoff Projects remains dedicated in their vision to transform our clients into the best-possible solution providers. Come along with us on this path unbounded by the sky, from where, powered by energy of imagination and a dedication to quality, we push to stay on the top.
#VLSI projects#Arithmetic Projects#ECE Projects#VLSI Projects#VLSI Projects for MTech#VLSI Projects using Verilog#VLSI Projects for MTech students#MTech VLSI Projects#IEEE VLSI Projects#VLSI Projects for Final Year ECE#VLSI Projects for ECE
0 notes