I took a look at the fantasy city maps at http://www.djeryv.com/ and they look to be generated with a basic geomorph generator. That is, blocks are defined with appropriate connectivity, a basic tile is selected, tiles that match the edges of the existing tiles are added (it's the same technique used in link 3 in Redrobe's post above). This technique can be modified in many ways (distance from resources, distance from city center, etc), but the overall layout will always match the underlying grid geometry (usually square). The hardest part is getting enough tiles to avoid obvious repeats, followed by avoid repeats in a reasonable perceptual distance. Many folks have done good jobs with 20 to 40 unique tiles, but I am always in favor of more. If you're interested in having several different sets of edges, consider searching the internet on the term "Wang Tiles".

If you'd like to go for the building-level procedural generation method suggested by Hai-Etlik, take a look at http://peterwonka.net/Publications/publications.html for inspiration.

The best advice I can give you is the same as I learned back in the good ol' days of hand mapping: place the elements that are important to your plot first and then grow out from there. If you're using geomorphs, having a lot of geomorphs of 1x1 size to do infill is good, a number of 1x2 tiles to give better visual breakup, and larger ones as needed for unique areas like boss temples.